Aplikasi Wear OS dapat berjalan secara mandiri, tanpa aplikasi pendamping. Hal ini berarti bahwa aplikasi Wear OS perlu mengelola autentikasi sendiri saat mengakses data dari internet. Namun ukuran layar jam tangan yang kecil dan lebih kecil kemampuan input membatasi opsi autentikasi yang dapat digunakan aplikasi Wear OS.
Panduan ini membahas metode autentikasi yang direkomendasikan untuk aplikasi Wear OS dan juga alternatif jika metode tersebut tidak sesuai dengan kasus penggunaan aplikasi.
Untuk mempelajari lebih lanjut cara mendesain pengalaman login yang baik, lihat Panduan UX login.
Mode tamu
Tidak mewajibkan autentikasi untuk semua fungsi. Sebagai gantinya, sediakan fitur sebanyak mungkin untuk pengguna tanpa mengharuskan mereka untuk {i>login<i}.
Pengguna dapat menemukan dan menginstal aplikasi Wear Anda tanpa menggunakan perangkat seluler jadi mereka mungkin tidak memiliki akun dan mungkin tidak tahu fitur apa yang di seluruh platform Google. Pastikan fungsi mode tamu menampilkan fitur aplikasi Anda secara akurat.
Beberapa perangkat mungkin tetap terbuka kuncinya lebih lama
Pada perangkat yang didukung yang menjalankan Wear OS 5 atau yang lebih baru, sistem akan mendeteksi apakah pengguna memakai perangkat di pergelangan tangan mereka. Jika pengguna menonaktifkan pergelangan tangan deteksi, dan kemudian melepaskan perangkat dari pergelangan tangan mereka, sistem menjaga perangkat terbuka kuncinya untuk waktu yang lebih lama dari yang seharusnya.
Jika aplikasi Anda memerlukan tingkat keamanan yang lebih tinggi—seperti saat menampilkan data yang berpotensi sensitif atau pribadi—periksa terlebih dahulu apakah deteksi pergelangan tangan diaktifkan:
val wristDetectionEnabled =
isWristDetectionAutoLockingEnabled(applicationContext)
Jika nilai yang ditampilkan metode ini adalah false
, minta pengguna untuk login ke
di aplikasi Anda sebelum menampilkan konten khusus pengguna.
Metode autentikasi yang direkomendasikan
Gunakan metode autentikasi berikut untuk mengaktifkan aplikasi Wear OS mandiri untuk mendapatkan kredensial otentikasi pengguna.
Meneruskan token menggunakan lapisan data
Aplikasi pendamping ponsel dapat mentransfer data autentikasi ke aplikasi Wear OS dengan aman menggunakan Lapisan Data Wearable. Transfer kredensial sebagai pesan atau item data.
Jenis autentikasi ini biasanya tidak meminta pengguna untuk melakukan tindakan apa pun. Namun, hindari melakukan autentikasi tanpa memberi tahu pengguna bahwa mereka sedang login. Anda dapat memberi tahu pengguna menggunakan layar sederhana yang dapat ditutup, yang menunjukkan bahwa akun mereka sedang ditransfer dari perangkat seluler.
Penting: Aplikasi Wear harus menawarkan minimal satu metode autentikasi lain karena opsi ini hanya berfungsi pada smartwatch yang tersambung ke ponsel Android saat aplikasi seluler yang terkait diinstal. Berikan metode autentikasi alternatif bagi pengguna yang tidak memiliki aplikasi seluler yang sesuai, atau yang perangkat Wear OS-nya disambungkan dengan perangkat iOS.
Teruskan token menggunakan lapisan data dari aplikasi seluler seperti yang ditunjukkan pada contoh berikut:
val token = "..." // Auth token to transmit to the wearable device. val dataClient: DataClient = Wearable.getDataClient(context) val putDataReq: PutDataRequest = PutDataMapRequest.create("/auth").run { dataMap.putString("token", token) asPutDataRequest() } val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq)
Proses peristiwa perubahan data di aplikasi smartwatch seperti yang ditunjukkan dalam contoh berikut:
val dataClient: DataClient = Wearable.getDataClient(context) dataClient.addListener{ dataEvents -> dataEvents.forEach { event -> if (event.type == DataEvent.TYPE_CHANGED) { val dataItemPath = event.dataItem.uri.path ?: "" if (dataItemPath.startsWith("/auth")) { val token = DataMapItem.fromDataItem(event.dataItem).dataMap.getString("token") // Display interstitial screen to notify the user they are being signed in. // Then, store the token and use it in network requests. } } } }
Untuk informasi lengkap tentang penggunaan Lapisan Data Wearable, lihat Mengirim dan menyinkronkan data di Wear OS.
Menggunakan OAuth 2.0
Wear OS mendukung dua alur berbasis OAuth 2.0, yang dijelaskan di bagian berikut:
- Pemberian Kode Otorisasi dengan Kunci Bukti untuk Code Exchange (PKCE), seperti yang dijelaskan dalam RFC 7636
- Pemberian Otorisasi Perangkat, seperti yang dijelaskan dalam RFC 8628.
Catatan: Untuk memastikan aplikasi Anda aktif saat smartwatch beralih ke mode standby, aktifkan mode Selalu Aktif menggunakan
AmbientModeSupport.attach
dalam aktivitas yang melakukan autentikasi. Untuk mengetahui informasi selengkapnya tentang praktik terbaik dalam mode standby,
lihat Menjaga aplikasi Anda tetap terlihat di Wear.
Kunci Bukti untuk Pertukaran Kode (PKCE)
Untuk menggunakan PKCE secara efektif, gunakan
RemoteAuthClient
.
Untuk membuat permintaan autentikasi dari aplikasi Wear OS ke penyedia OAuth, buat
objek
OAuthRequest
. Objek ini terdiri dari URL ke endpoint OAuth Anda untuk mendapatkan token dan
objek
CodeChallenge
. Kode berikut menunjukkan contoh pembuatan permintaan autentikasi:
val request = OAuthRequest.Builder(this.applicationContext) .setAuthProviderUrl(Uri.parse("https://....")) .setClientId(clientId) .setCodeChallenge(codeChallenge) .build()
Setelah Anda membuat permintaan autentikasi, kirimkan ke aplikasi pendamping menggunakan metode
sendAuthorizationRequest()
.
val client = RemoteAuthClient.create(this) client.sendAuthorizationRequest(request, { command -> command?.run() }, object : RemoteAuthClient.Callback() { override fun onAuthorizationResponse( request: OAuthRequest, response: OAuthResponse ) { // Extract the token from the response, store it and use it in network requests. } override fun onAuthorizationError(errorCode: Int) { // Handle error } } )
Permintaan ini memicu panggilan ke aplikasi pendamping yang kemudian akan menampilkan UI otorisasi di browser web pada ponsel pengguna. Penyedia OAuth 2.0 mengautentikasi pengguna dan memperoleh izin pengguna untuk izin yang diminta. Respons akan dikirim ke URL alihan yang dibuat secara otomatis.
Setelah otorisasi berhasil atau gagal, server OAuth 2.0 akan mengalihkan ke URL yang disebutkan dalam permintaan. Jika pengguna menyetujui permintaan akses, respons akan berisi kode otorisasi. Jika pengguna tidak menyetujui permintaan tersebut, respons akan berisi pesan error.
Respons berupa string kueri, dan akan terlihat seperti salah satu contoh berikut:
https://wear.googleapis.com/3p_auth/com.your.package.name?code=xyz https://wear.googleapis-cn.com/3p_auth/com.your.package.name?code=xyz
Tindakan ini akan memuat halaman yang mengarahkan pengguna ke aplikasi pendamping. Aplikasi pendamping memverifikasi
URL respons dan meneruskan respons ke aplikasi smartwatch pihak ketiga menggunakan
onAuthorizationResponse
API.
Kemudian aplikasi smartwatch dapat menukar kode otorisasi dengan token akses.
Catatan: Setelah OAuthRequest
dibuat, Anda dapat menemukan URL alihan dengan mengakses
redirectUrl.
Pemberian Otorisasi Perangkat
Saat menggunakan Pemberian Otorisasi Perangkat, pengguna akan membuka URI verifikasi di perangkat lain. Kemudian, server otorisasi akan meminta atau menolak permintaan tersebut.
Untuk mempermudah proses ini, gunakan
RemoteActivityHelper
untuk membuka halaman web di perangkat seluler pengguna yang disambungkan, seperti yang ditunjukkan dalam contoh berikut:
// Request access from the authorization server and receive Device Authorization Response. val verificationUri = "..." // Extracted from the Device Authorization Response. RemoteActivityHelper.startRemoteActivity( this, Intent(Intent.ACTION_VIEW) .addCategory(Intent.CATEGORY_BROWSABLE) .setData(Uri.parse(verificationUri)), null ) // Poll the authorization server to find out if the user completed the user authorization // step on their mobile device.
Jika Anda memiliki aplikasi iOS, gunakan link universal untuk menangkap intent ini di aplikasi Anda, bukan mengandalkan browser untuk melakukan otorisasi token.
Metode autentikasi lainnya
Wear OS mendukung metode login tambahan, yang dijelaskan di bagian berikut.
Login dengan Google
Login dengan Google memungkinkan pengguna login dengan akun Google yang sudah mereka miliki. Menawarkan terbaik dan mudah untuk didukung, terutama jika Anda sudah menerapkan di aplikasi genggam Anda.
Setelah metode autentikasi yang direkomendasikan seperti yang dijelaskan sebelumnya, Google Login adalah solusi pilihan berikutnya karena juga dapat berfungsi dengan baik di iOS. Hal berikut menjelaskan cara menyelesaikan integrasi Login dengan Google dasar.
Prasyarat
Sebelum dapat mulai mengintegrasikan Login dengan Google di aplikasi Wear OS, Anda harus mengonfigurasi Project Konsol API Google dan siapkan project Android Studio Anda. Untuk informasi selengkapnya, lihat Mulai Mengintegrasikan Login dengan Google ke dalam Aplikasi Android Anda.
Jika Anda menggunakan Login dengan Google dengan aplikasi atau situs yang berkomunikasi dengan server backend, ada dua prasyarat tambahan:
- Buat client ID aplikasi web OAuth 2.0 untuk server backend Anda. Client ID ini berbeda dengan client ID aplikasi Anda. Untuk selengkapnya informasi, lihat Mengaktifkan Akses Sisi Server.
- Identifikasi pengguna yang saat ini login dengan aman di server dengan mengirimkan token ID pengguna menggunakan HTTPS. Untuk mempelajari cara mengautentikasi pengguna di server backend, lihat Lakukan autentikasi dengan server backend.
Mengintegrasikan Login dengan Google ke dalam aplikasi
Tinjau dan terapkan langkah-langkah berikut, yang dijelaskan di bagian berikut ini, untuk mengintegrasikan Login dengan Google ke dalam aplikasi Wear OS:
- Mengonfigurasi Login dengan Google.
- Menambahkan tombol Login dengan Google.
- Memulai alur login saat tombol login diketuk.
Mengonfigurasi Login dengan Google dan mem-build objek GoogleApiClient
Dalam metode onCreate()
aktivitas login, konfigurasi Login dengan Google untuk meminta
data pengguna yang dibutuhkan oleh aplikasi Anda. Kemudian, buat objek GoogleApiClient
dengan
akses ke Google Sign-In API dan opsi yang Anda tentukan. Langkah-langkah ini
ditunjukkan dalam contoh berikut:
public class MyNewActivity extends AppCompatActivity { private static final int RC_SIGN_IN = 9001; private GoogleSignInClient mSignInClient; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); GoogleSignInOptions options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .build(); mSignInClient = GoogleSignIn.getClient(this, options); } }
Menambahkan tombol Login dengan Google ke aplikasi
Selesaikan langkah-langkah berikut untuk menambahkan tombol Login dengan Google:
-
Tambahkan
SignInButton
ke tata letak aplikasi Anda: -
Di metode
onCreate()
aplikasi Anda, daftarkan metodeOnClickListener
untuk memproses login pengguna saat diketuk:
<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Kotlin
findViewById<View>(R.id.sign_in_button).setOnClickListener(this)
Java
findViewById(R.id.sign_in_button).setOnClickListener(this);
Membuat intent login dan memulai alur login
Menangani ketukan tombol login di onCLick()
Anda
dengan membuat intent login dengan
Metode getSignInIntent()
. Lalu mulai intent dengan
startActivityForResult()
.
Intent intent = mSignInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN);
Pengguna akan diminta memilih Akun Google yang akan digunakan untuk login. Jika Anda meminta cakupan selain profil, email, dan ID terbuka, pengguna juga diminta untuk memberikan akses ke Google Cloud Platform.
Terakhir, dalam aktivitas
onActivityResult
, ambil hasil login dengan
getSignInResultFromIntent
. Setelah Anda mengambil hasil login, Anda dapat
memeriksa apakah proses login berhasil menggunakan
isSuccess
. Jika login berhasil, Anda dapat memanggil
getSignInAccount
untuk mendapatkan
Objek GoogleSignInAccount
yang berisi informasi tentang proses login
pengguna, seperti nama pengguna. Langkah-langkah ini ditampilkan dalam contoh
berikut.
Kotlin
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { super.onActivityResult(requestCode, resultCode, data) // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...). if (requestCode == RC_SIGN_IN) { Auth.GoogleSignInApi.getSignInResultFromIntent(data)?.apply { if (isSuccess) { // Get account information. fullName = signInAccount?.displayName mGivenName = signInAccount?.givenName mFamilyName = signInAccount?.familyName mEmail = signInAccount?.email } } } }
Java
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...). if (requestCode == RC_SIGN_IN) { GoogleSignInResult signInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (signInResult.isSuccess()) { GoogleSignInAccount acct = signInResult.getSignInAccount(); // Get account information. fullName = acct.getDisplayName(); givenName = acct.getGivenName(); familyName = acct.getFamilyName(); email = acct.getEmail(); } } }
Untuk melihat contoh aplikasi yang mengimplementasikan Login dengan Google, lihat Contoh Login dengan Google Horologist di GitHub.
Autentikasi kode kustom
Sebagai alternatif metode otentikasi yang dijelaskan sebelumnya, Anda dapat dapat mengharuskan pengguna untuk mengotentikasi dari perangkat lain, seperti ponsel atau tablet, dan memperoleh kode numerik yang memiliki masa aktif singkat. Pengguna kemudian memasukkan kode pada perangkat Wear OS untuk mengonfirmasi identitas mereka dan menerima token autentikasi.
Alur autentikasi ini menggunakan modul login aplikasi, atau secara manual mengintegrasikan metode login penyedia autentikasi pihak ketiga ke dalam kode aplikasi Anda. Meskipun metode otentikasi ini membutuhkan pekerjaan manual dan upaya tambahan lebih aman, Anda dapat menggunakan metode ini jika memerlukan autentikasi lebih awal di aplikasi Wear OS mandiri.
Alur autentikasi untuk penyiapan ini berjalan sebagai berikut:
- Pengguna melakukan tindakan pada aplikasi Wear OS yang memerlukan otorisasi.
- Aplikasi Wear OS menampilkan layar autentikasi kepada pengguna dan memerintahkan pengguna untuk memasukkan kode dari URL tertentu.
- Pengguna beralih ke perangkat seluler, tablet, atau PC, lalu meluncurkan {i>browser<i}, membuka URL yang ditentukan di aplikasi Wear OS, lalu login.
- Pengguna menerima kode numerik yang memiliki masa aktif singkat yang dimasukkan ke aplikasi Wear OS
layar autentikasi menggunakan keyboard virtual di Wear OS:
- Selanjutnya, Anda dapat menggunakan kode yang dimasukkan sebagai bukti bahwa ini adalah dan menukar kode dengan token autentikasi yang disimpan dan diamankan di perangkat Wear OS untuk panggilan yang diautentikasi.
Catatan: Kode yang dihasilkan pengguna harus sepenuhnya berupa angka dan tidak boleh berisi karakter alfabet.
Alur autentikasi ini digambarkan dalam diagram berikut: