التواصل مباشرةً عبر شبكة على أجهزة مستقلة

باستخدام Wear OS من Google، يمكن للساعة الاتصال بالشبكة مباشرةً، بدون الوصول إلى هاتف Android أو iOS. لا تستخدم واجهة برمجة تطبيقات Data Layer API لتوصيل تطبيق Wear OS بإحدى الشبكات. بدلاً من ذلك، اتبع الإرشادات والخطوات الواردة في هذا الدليل.

الوصول إلى الشبكة

يمكن لتطبيقات Wear OS إرسال طلبات شبكة. عندما تحتوي الساعة على اتصال بلوتوث بهاتف، يتم بشكل عام توجيه حركة بيانات الشبكة على الساعة عبر الهاتف.

عندما يكون الهاتف غير متاح، يتم استخدام شبكة Wi-Fi وشبكات الجوّال، بناءً على مكونات الساعة. تعالج منصة Wear OS عمليات الانتقال بين الشبكات.

يمكنك استخدام بروتوكولات مثل HTTP وTCP وUDP. ولا تتوفّر واجهات برمجة تطبيقات android.webkit، بما في ذلك الفئة CookieManager. يمكنك استخدام ملفات تعريف الارتباط عن طريق قراءة العناوين وكتابتها في الطلبات والردود.

يمكنك استخدام WorkManager للطلبات غير المتزامنة، بما في ذلك استطلاع الرأي على فترات زمنية منتظمة.

إذا كنت بحاجة إلى الاتصال بأنواع شبكات معيّنة، راجِع قراءة حالة الشبكة.

الوصول إلى الشبكة ذات النطاق الترددي العالي

وتدير منصة Wear OS إمكانية الاتصال بالشبكة بهدف توفير أفضل تجربة ممكنة للمستخدمين. يختار النظام الأساسي الشبكة النشطة الافتراضية من خلال تحقيق التوازن بين المطلوبين وهما: عمر البطارية الطويل ومعدل نقل البيانات للشبكة.

عند إعطاء الأولوية للاحتفاظ بالبطارية، قد لا يكون لدى الشبكة النشطة معدل نقل بيانات كافٍ لمهام الشبكة، مثل نقل الملفات الكبيرة أو بث الوسائط.

يقدّم هذا القسم إرشادات حول استخدام الفئة ConnectivityManager للمساعدة في التأكّد من أنّ تطبيقك يتضمّن معدل نقل البيانات للشبكة الذي يحتاج إليه. للحصول على معلومات عامة حول التحكُّم الدقيق في موارد الشبكة، يمكنك الاطّلاع على إدارة استخدام الشبكة.

طلب اتصال Wi-Fi

بالنسبة إلى حالات الاستخدام التي تتطلب الوصول إلى الشبكة ذات النطاق الترددي العالي، مثل نقل الملفات الكبيرة أو بث الوسائط، يجب طلب الاتصال بشبكة ذات معدل نقل بيانات مرتفع، مثل Wi-Fi. يظهر ذلك في المثال التالي:

Kotlin

val callback = object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network: Network) {
        super.onAvailable(network)
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network)
    }

    override fun onLost(network: Network) {
        super.onLost(network)
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
}
connectivityManager.requestNetwork(
    NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
    callback
)

Java

ConnectivityManager.NetworkCallback callback = new ConnectivityManager.NetworkCallback() {
    public void onAvailable(Network network) {
        super.onAvailable(network);
        // The Wi-Fi network has been acquired. Bind it to use this network by default.
        connectivityManager.bindProcessToNetwork(network);
    }

    public void onLost(Network network) {
        super.onLost(network);
        // Called when a network disconnects or otherwise no longer satisfies this request or callback.
    }
};
connectivityManager.requestNetwork(
        new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(),
        callback
);

قد لا يتم اكتساب شبكة بشكل فوري، لأنّ شبكة Wi-Fi أو الراديو الخلوي في الساعة قد تكون متوقّفة للحفاظ على طاقة البطارية. إذا تعذّر على الساعة الاتصال بشبكة، لن يتم استدعاء طريقة onAvailable() لمثيل NetworkCallback.

بعد طلب الرقم onAvailable()، سيحاول أن يظل متصلاً بشبكة Wi-Fi إلى أن يتم إطلاق NetworkCallback. للحفاظ على عمر البطارية، يمكنك رفع إصبعك عن معاودة الاتصال كما هو موضَّح في المثال التالي عندما لا تحتاج إلى شبكة Wi-Fi بعد الآن.

Kotlin

connectivityManager.bindProcessToNetwork(null)
connectivityManager.unregisterNetworkCallback(callback)

Java

connectivityManager.bindProcessToNetwork(null);
connectivityManager.unregisterNetworkCallback(callback);

بدء نشاط إعدادات Wi-Fi

عند طلب شبكة Wi-Fi، يحاول النظام الاتصال بشبكة محفوظة إذا تمّ إعداد شبكة وفي نطاقها. إذا لم تتوفّر أي شبكة Wi-Fi محفوظة، لن يتم استدعاء طريقة معاودة الاتصال onAvailable لمثيل NetworkCallback.

إذا كنت تستخدم Handler لانتهاء مهلة طلب الشبكة، يمكنك توجيه المستخدم لإضافة شبكة Wi-Fi عند انتهاء المهلة. أرسل المستخدم مباشرة إلى نشاط إضافة شبكة Wi-Fi باستخدام الغرض التالي:

Kotlin

context.startActivity(Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"))

Java

context.startActivity(new Intent("com.google.android.clockwork.settings.connectivity.wifi.ADD_NETWORK_SETTINGS"));

لبدء نشاط الإعدادات، يجب أن يحصل تطبيقك على إذن "CHANGE_WIFI_STATE".

اعتبارات واجهة المستخدم

إذا كان تطبيقك يتطلب اتصالاً بشبكة Wi-Fi جديدة لإجراء عملية ذات معدّل نقل بيانات عالٍ، تأكَّد من أنّ سبب الاتصال واضح للمستخدم قبل تشغيل إعدادات Wi-Fi. لا تطلب من المستخدم إضافة شبكة Wi-Fi جديدة إلا عندما تكون الشبكة ذات معدل نقل بيانات عالي مطلوبة. لا تمنع المستخدم من الوصول إلى ميزات التطبيق التي لا تتطلب شبكة ذات معدل نقل بيانات عالي.

يعرض الشكل 1 تطبيق موسيقى. يتيح التطبيق للمستخدم تصفُّح الموسيقى على شبكة ذات معدّل نقل بيانات منخفض ولا يطلب من المستخدم إضافة شبكة Wi-Fi جديدة إلا إذا أراد تنزيل الموسيقى أو بثّها.

جارٍ تنزيل الموسيقى

الشكل 1. تدفق في تطبيق الموسيقى لتنزيل الموسيقى.

اعتبارات استخدام البيانات والقوة

للمساعدة في الحفاظ على عمر البطارية وتقليل استخدام بيانات الجوّال، يمكنك تأجيل أي مهام غير أساسية للشبكات، مثل إعداد التقارير الإحصائية أو جمع السجلات، إلى أن يعيد جهاز Wear OS إنشاء اتصال بلوتوث أو Wi-Fi بدلاً من LTE أو اتصال تفرض تكلفة استخدام.

المراسلة عبر السحابة الإلكترونية من Firebase

لإرسال الإشعارات، استخدِم خدمة المراسلة عبر السحابة الإلكترونية من Firebase (FCM) مباشرةً.

ما مِن واجهات برمجة تطبيقات مخصَّصة للوصول إلى الشبكة أو ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" لنظام Wear OS. راجِع المستندات الحالية حول الاتصال بشبكة والمراسلة في السحابة الإلكترونية.

تعمل ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" بشكل جيد مع ميزة القيلولة، وهي الطريقة التي يُنصح بها لإرسال الإشعارات إلى الساعة.

توفير الرسائل من خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" من خلال جمع رمز مميَّز للتسجيل لأحد الأجهزة عند تشغيل تطبيق Wear OS ثم قم بتضمين الرمز المميز كجزء من الوجهة عندما يرسل الخادم الرسائل إلى نقطة نهاية FCM REST. ترسل خدمة FCM الرسائل إلى الجهاز الذي يحدده الرمز المميز.

تكون رسالة FCM بتنسيق JavaScript Object Notation (JSON) ويمكن أن تتضمّن إحدى الحمولات التالية أو كلتاهما:

  • حمولة الإشعارات: عندما يتم استلام حمولة الإشعارات من خلال ساعة، تظهر البيانات للمستخدم مباشرةً في سلسلة الإشعارات. عندما ينقر المستخدم على الإشعار، يتم تشغيل التطبيق.
  • حمولة البيانات: عندما تحتوي الحمولة على مجموعة من أزواج المفاتيح أو القيم المخصّصة. يتم تسليم حمولة البيانات كبيانات إلى تطبيق Wear OS.

لمزيد من المعلومات وأمثلة على الحمولات، يُرجى الاطّلاع على لمحة عن رسائل "المراسلة عبر السحابة الإلكترونية من Firebase".

يتم تلقائيًا نقل الإشعارات من تطبيق الهاتف إلى الساعة. إذا كان لديك تطبيق Wear OS مستقل وتطبيق هاتف مطابق، قد تظهر إشعارات متكررة. على سبيل المثال، يمكن لكلا الجهازين عرض إشعار واحد من خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" يتلقّاه كلّ من الهاتف والساعة، كل على حدة. يمكنك منع ذلك باستخدام واجهات برمجة التطبيقات.

استخدام الخدمات التي تعمل في الخلفية

للمساعدة في ضمان تنفيذ المهام في الخلفية بشكل صحيح، يجب مراعاة القيلولة و"تطبيقات وضع الاستعداد".

عند إيقاف تشغيل الشاشة أو دخولها في وضع الإضاءة السينمائية لفترة كافية، يمكن أن تحدث مجموعة فرعية من ميزة "القيلولة"، كما يمكن تأجيل المهام في الخلفية لفترات معيّنة. في وقت لاحق، عندما يكون الجهاز ثابتًا لفترة طويلة، يحدث قيلولة عادية. يمكنك جدولة الطلبات باستخدام واجهة برمجة التطبيقات WorkManager، التي تتيح لتطبيقك التسجيل لتنفيذ الرموز البرمجية الآمنة في Doze.

الجدولة مع قيود

يمكنك استخدام القيود لضبط الطلبات بطريقة تحافظ على عمر البطارية. حدد واحدًا أو أكثر من القيود التالية لتضمينه في طلباتك:

  • قم بجدولة طلب يتطلب الاتصال بالشبكة.

    حدِّد ما إذا كان NetworkType هو CONNECTED أو UNMETERED. يُستخدم UNMETERED لعمليات نقل البيانات الكبيرة، بينما يُستخدم CONNECTED لعمليات النقل الصغيرة.

  • يمكنك جدولة طلب أثناء الشحن.

  • يمكنك جدولة طلب عندما يكون الجهاز غير نشِط لمدة معيّنة. ويكون هذا مفيدًا للأعمال ذات الأولوية الأقل في الخلفية أو المزامنة، وخاصةً عند شحن الجهاز.

لمزيد من المعلومات، راجع دليل تأثير القيود على العمل الدوري لـ WorkManager.