Ukuran layar smartwatch yang kecil dan kemampuan input yang berkurang membatasi opsi autentikasi yang dapat digunakan aplikasi Wear OS. Selain itu, aplikasi Wear OS dapat berjalan secara mandiri tanpa aplikasi pendamping. Ini berarti aplikasi Wear OS perlu mengelola autentikasi sendiri saat mengakses data dari internet.
Mode tamu
Tidak mewajibkan autentikasi untuk semua fungsi. Sebagai gantinya, sediakan fitur sebanyak mungkin kepada pengguna, tanpa mengharuskannya login.
Pengguna dapat menemukan dan menginstal aplikasi Wear meskipun belum pernah menggunakan aplikasi seluler sebelumnya sehingga mungkin tidak memiliki akun. Dalam hal ini, fungsi mode tamu harus menampilkan fitur aplikasi secara akurat untuk mendorong pengguna membuat akun.
Metode autentikasi yang direkomendasikan
Gunakan metode autentikasi berikut untuk mengaktifkan aplikasi Wear OS mandiri untuk mendapatkan kredensial autentikasi 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 alur berbasis OAuth 2.0 berikut:
- Pemberian Kode Otorisasi dengan PKCE (Kunci Bukti untuk Pertukaran Kode), 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 informasi lengkap 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
. Lihat contoh pembuatan permintaan autentikasi berikut:
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 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 akan berbentuk 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
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.
Login dengan Google
Login dengan Google memungkinkan pengguna untuk login menggunakan Akun Google yang sudah mereka miliki. Metode autentikasi ini menawarkan pengalaman pengguna terbaik serta mudah untuk didukung, terutama jika Anda telah mengimplementasikan solusi ini pada aplikasi ponsel.
Login dengan Google adalah solusi yang paling banyak dipilih karena juga dapat difungsikan di iOS. Bagian berikut menjelaskan cara menyelesaikan integrasi Login dengan Google di tingkat dasar.
Prasyarat
Sebelum mulai mengintegrasikan Login dengan Google di aplikasi Wear, Anda harus mengonfigurasi project Konsol API Google dan menyiapkan project Android Studio. Untuk informasi selengkapnya, lihat panduan Memulai Integrasi untuk Login dengan Google.
Catatan: Jika Anda menggunakan Login dengan Google dengan aplikasi atau situs yang berkomunikasi dengan server backend, buat client ID aplikasi web OAuth 2.0 untuk server backend Anda. Client ID ini berbeda dengan client ID aplikasi Anda. Untuk informasi selengkapnya, lihat Mengaktifkan Akses Sisi Server.
Penting: Jika aplikasi Anda berkomunikasi dengan server backend, identifikasi pengguna yang saat ini login dengan aman di server dengan mengirimkan token ID pengguna tersebut menggunakan HTTPS. Untuk mempelajari cara mengautentikasi pengguna di server backend, lihat Mengautentikasi dengan server backend.
Mengintegrasikan Login dengan Google ke dalam aplikasi Anda
Untuk mengintegrasikan Login dengan Google ke dalam aplikasi Wear OS, Anda harus:
- Mengonfigurasi Login dengan Google.
- Menambahkan tombol Login dengan Google.
- Memulai alur login saat tombol login diklik.
Mengonfigurasi Login dengan Google dan mem-build objek GoogleApiClient
Dalam metode onCreate
aktivitas login, konfigurasikan Login dengan Google untuk meminta
data pengguna yang diperlukan oleh aplikasi Anda. Kemudian, buat objek GoogleApiClient
dengan
akses ke Google Sign-In API dan opsi yang Anda tentukan.
Kotlin
// Configure sign-in to request the user's ID, email address, and basic // profile. The ID and basic profile are included in DEFAULT_SIGN_IN. // If you need to request additional scopes to access Google APIs, specify them with // requestScopes(). googleApiClient = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build() .let { signInConfigBuilder -> // Build a GoogleApiClient with access to the Google Sign-In API and the // options specified in the sign-in configuration. GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, signInConfigBuilder) .build() }
Java
// Configure sign-in to request the user's ID, email address, and basic // profile. The ID and basic profile are included in DEFAULT_SIGN_IN. // If you need to request additional scopes to access Google APIs, specify them with // requestScopes(). GoogleSignInOptions.Builder signInConfigBuilder = new GoogleSignInOptions .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); // Build a GoogleApiClient with access to the Google Sign-In API and the // options specified in the sign-in configuration. googleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, signInConfigBuilder) .build();
Menambahkan tombol Login dengan Google ke aplikasi
- Tambahkan SignInButton ke tata letak aplikasi Anda.
-
Dalam metode
onCreate()
aplikasi Anda, daftarkanOnClickListener
tombol untuk membuat pengguna login saat diklik.
<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
Saat tombol login diklik, tangani pengetukan tombol login dalam metode onCLick()
dengan membuat intent login dengan metode
getSignInIntent
, lalu mulai intent dengan metode
startActivityForResult
.
Kotlin
Auth.GoogleSignInApi.getSignInIntent(googleApiClient).also { signInIntent -> startActivityForResult(signInIntent, RC_SIGN_IN) }
Java
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN);
Pengguna akan diminta memilih Akun Google yang akan digunakan untuk login. Jika Anda meminta cakupan di luar profil, email, dan openID, pengguna juga akan diminta untuk memberikan akses ke resource tersebut.
Terakhir, pada metode
onActivityResult
aktivitas, ambil hasil login dengan
getSignInResultFromIntent
. Setelah Anda mengambil hasil login, Anda dapat
memeriksa apakah proses login berhasil menggunakan metode
isSuccess
. Jika login berhasil, Anda dapat memanggil metode
getSignInAccount
untuk mendapatkan objek
GoogleSignInAccount
yang berisi informasi tentang pengguna yang
login, seperti nama pengguna.
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 public 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 aplikasi contoh yang mengimplementasikan Login dengan Google, lihat aplikasi contoh di GitHub.
Autentikasi kode kustom
Metode autentikasi ini mengharuskan pengguna untuk menjalankan autentikasi dari sumber eksternal (perangkat seluler/tablet/PC) dan mendapatkan kode yang memiliki masa aktif singkat yang dimasukkan pengguna untuk membuktikan identitasnya dan ditukarkan dengan token autentikasi di perangkat Wear OS. Dengan metode ini, Anda dapat mengautentikasi pengguna ke aplikasi Wear OS dengan menggunakan modul login aplikasi, atau dengan mengintegrasikan metode login penyedia autentikasi pihak ketiga ke dalam kode aplikasi Anda secara manual. Meskipun metode ini memerlukan kerja manual dan upaya tambahan untuk meningkatkan keamanannya, jika Anda memerlukan autentikasi lebih awal di aplikasi Wear OS mandiri, metode ini dapat membantu.
Alur autentikasi untuk penyiapan ini berjalan sebagai berikut:
- Pengguna melakukan tindakan pada aplikasi pihak ketiga yang memerlukan otorisasi.
- Aplikasi Wear OS pihak ketiga menampilkan layar autentikasi kepada pengguna dan memintanya memasukkan kode dari URL yang ditentukan.
- Pengguna beralih ke perangkat seluler/tablet atau PC, meluncurkan browser, membuka URL yang ditentukan di aplikasi Wear OS, dan login.
- Pengguna menerima kode yang memiliki masa aktif singkat yang dimasukkan ke layar autentikasi aplikasi Wear OS
menggunakan keyboard yang ada di perangkat Wear OS untuk mendapatkan autentikasi:
- Dari sini dan seterusnya, Anda dapat menggunakan kode yang dimasukkan sebagai bukti bahwa ini adalah pengguna yang benar, dan menukarnya dengan token autentikasi yang disimpan dan diamankan di perangkat Wear OS untuk panggilan yang diautentikasi.
