Akses dan sinkronisasi jaringan di Wear OS

Dengan Wear OS by Google, smartwatch dapat langsung berkomunikasi dengan jaringan, tanpa akses ke ponsel Android atau iOS. Jangan gunakan Data Layer API untuk menghubungkan aplikasi Wear OS ke jaringan. Sebagai gantinya, ikuti panduan dan langkah-langkah dalam panduan ini.

Akses jaringan

Aplikasi Wear OS dapat membuat permintaan jaringan. Ketika smartwatch terhubung ke ponsel melalui koneksi Bluetooth, traffic jaringannya secara umum akan diberi proxy melalui ponsel.

Jika ponsel tidak tersedia, jaringan Wi-Fi dan seluler akan digunakan, bergantung pada hardware smartwatch. Platform Wear dapat menangani transisi antar-jaringan.

Anda dapat menggunakan protokol seperti HTTP, TCP, dan UDP. Namun, API android.webkit, termasuk class CookieManager, tidak tersedia. Anda dapat menggunakan cookie dengan membaca dan menulis header pada permintaan dan respons.

Sebaiknya gunakan juga WorkManager API untuk permintaan asinkron, termasuk polling secara berkala.

Jika Anda perlu terhubung ke jenis jaringan tertentu, lihat Membaca status jaringan.

Akses jaringan bandwidth tinggi

Platform Wear OS mengelola konektivitas jaringan untuk menyediakan pengalaman pengguna terbaik secara keseluruhan. Platform ini memilih jaringan default yang aktif dengan menyeimbangkan dua kebutuhan:

  • Baterai tahan lama
  • Bandwidth jaringan

Ketika ketahanan baterai diprioritaskan, jaringan aktif mungkin tidak memiliki cukup bandwidth untuk melakukan tugas jaringan seperti memindahkan file besar atau streaming media.

Bagian ini berisi panduan penggunaan class ConnectivityManager untuk membantu memastikan aplikasi Anda memiliki bandwidth jaringan yang dibutuhkan. Untuk informasi umum tentang kontrol yang mendetail atas resource jaringan, lihat Mengelola penggunaan jaringan.

Meminta konektivitas Wi-Fi

Untuk kasus penggunaan yang memerlukan akses jaringan bandwidth tinggi, seperti memindahkan file besar atau media streaming, mintalah konektivitas dengan transportasi bandwidth tinggi, seperti Wi-Fi. Hal ini ditunjukkan dalam contoh berikut:

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
);

Jaringan mungkin tidak dapat diperoleh secara langsung karena radio Wi-Fi atau seluler smartwatch terkadang mati untuk menghemat baterai. Jika smartwatch tidak dapat terhubung ke jaringan, metode onAvailable() dari instance NetworkCallback tidak akan dipanggil.

Setelah onAvailable() dipanggil, perangkat akan mencoba tetap terhubung ke jaringan Wi-Fi hingga NetworkCallback dirilis. Untuk menghemat masa pakai baterai, lepaskan callback seperti ditunjukkan dalam contoh berikut saat Anda tidak lagi memerlukan jaringan Wi-Fi.

Kotlin

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

Java

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

Meluncurkan aktivitas setelan Wi-Fi

Saat meminta jaringan Wi-Fi, sistem akan mencoba terhubung ke jaringan tersimpan jika ada yang telah dikonfigurasi dan berada dalam jangkauan. Jika tidak ada jaringan Wi-Fi tersimpan yang tersedia, metode callback onAvailable() dari instance NetworkCallback Anda tidak akan dipanggil.

Jika menggunakan Handler untuk membatalkan permintaan jaringan, Anda dapat mengarahkan pengguna untuk menambahkan jaringan Wi-Fi saat waktu tunggu habis. Arahkan pengguna langsung ke aktivitas untuk menambahkan jaringan Wi-Fi menggunakan intent berikut:

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"));

Untuk meluncurkan aktivitas setelan, aplikasi harus memiliki izin berikut: android.permission.CHANGE_WIFI_STATE.

Pertimbangan antarmuka pengguna

Jika aplikasi memerlukan koneksi ke jaringan Wi-Fi baru untuk operasi bandwidth tinggi, pastikan alasan penyambungannya jelas bagi pengguna sebelum meluncurkan setelan Wi-Fi. Hanya minta pengguna untuk menambahkan jaringan Wi-Fi baru jika jaringan bandwidth tinggi diperlukan. Jangan halangi pengguna untuk mengakses fitur aplikasi yang tidak memerlukan jaringan bandwidth tinggi.

Gambar 1 menunjukkan aplikasi musik. Aplikasi ini memungkinkan pengguna menjelajahi musik pada jaringan bandwidth yang lebih rendah dan hanya mengharuskan pengguna menambahkan jaringan Wi-Fi baru jika mereka ingin mendownload atau melakukan streaming musik.

Mendownload musik

Gambar 1. Alur aplikasi musik untuk mendownload musik.

Pertimbangan daya dan penggunaan data

Untuk membantu menghemat masa pakai baterai dan meminimalkan penggunaan data seluler, tunda tugas jaringan yang tidak penting, seperti pelaporan analisis atau pengumpulan log, hingga perangkat Wear OS terhubung kembali ke koneksi Bluetooth atau Wi-Fi.

Cloud messaging

Untuk mengirim notifikasi, aplikasi dapat langsung menggunakan Firebase Cloud Messaging (FCM).

Tidak ada API untuk akses jaringan atau FCM yang spesifik untuk Wear OS. Lihat dokumentasi yang ada tentang menghubungkan ke jaringan dan cloud messaging.

FCM berfungsi optimal dengan mode Istirahatkan dan merupakan cara yang direkomendasikan untuk mengirimkan notifikasi ke smartwatch.

Sediakan pesan dari FCM dengan mengumpulkan token pendaftaran untuk perangkat ketika aplikasi Wear OS berjalan. Kemudian, sertakan token sebagai bagian dari tujuan saat server mengirim pesan ke endpoint REST FCM. FCM akan mengirim pesan ke perangkat yang teridentifikasi oleh token.

Pesan FCM memiliki format JavaScript Object Notation (JSON) dan dapat menyertakan salah satu atau kedua payload berikut:

  • Payload notifikasi: saat payload notifikasi diterima oleh smartwatch, data akan ditampilkan secara langsung kepada pengguna dalam aliran notifikasi. Ketika pengguna mengetuk notifikasi, aplikasi Anda akan diluncurkan.
  • Payload data: payload memiliki serangkaian key pair atau value pair kustom. Payload dikirimkan sebagai data ke aplikasi Wear OS.

Untuk mengetahui informasi selengkapnya dan contoh payload, lihat Tentang pesan FCM.

Secara default, notifikasi akan dihubungkan dari aplikasi ponsel ke smartwatch. Jika Anda memiliki aplikasi Wear OS mandiri dan aplikasi ponsel terkait, notifikasi duplikat mungkin terjadi. Contohnya, notifikasi yang sama dari FCM, yang diterima ponsel dan smartwatch, mungkin akan ditampilkan di kedua perangkat secara terpisah. Anda dapat mencegah hal ini dengan menggunakan bridging API.

Menggunakan layanan latar belakang

Untuk memastikan tugas latar belakang dijalankan dengan benar, tugas harus mempertimbangkan mode Istirahatkan dan Aplikasi Standby.

Jika layar mati atau memasuki mode standby untuk waktu yang cukup lama, mode Istirahatkan sebagian mungkin diaktifkan, dan tugas latar belakang mungkin tertunda selama jangka waktu tertentu. Kemudian, jika standby lebih lama, perangkat akan memasuki mode Istirahatkan biasa. Jadwalkan permintaan dengan WorkManager API agar aplikasi dapat mendaftar untuk eksekusi kode yang aman dari mode Istirahatkan.

Menjadwalkan dengan batasan

Anda dapat menggunakan batasan untuk mengonfigurasi permintaan dengan cara yang dapat menghemat masa pakai baterai. Pilih satu atau beberapa batasan berikut untuk disertakan dalam permintaan Anda:

  • Menjadwalkan permintaan yang memerlukan jaringan. Tentukan apakah NetworkType adalah CONNECTED atau UNMETERED. UNMETERED digunakan untuk transfer data berukuran besar, sementara CONNECTED untuk transfer data berukuran kecil.
  • Menjadwalkan permintaan saat mengisi daya.
  • Menjadwalkan permintaan saat tidak ada aktivitas di perangkat. Batasan ini berguna untuk pekerjaan latar belakang prioritas rendah atau sinkronisasi, terutama saat perangkat sedang diisi dayanya.

Perlu diketahui bahwa jaringan bandwidth rendah tertentu, seperti Bluetooth LE, dianggap berbayar.

Untuk informasi selengkapnya, tinjau panduan Pengaruh batasan pada tugas berkala di WorkManager.