Dengan jam tangan yang mandiri, aplikasi Wear OS kini dapat dijalankan sepenuhnya di jam tangan tanpa aplikasi pendamping. Kapabilitas baru ini juga berarti bahwa aplikasi mandiri Wear OS perlu mengelola autentikasi sendiri, saat aplikasi perlu mengakses data dari cloud. Wear OS mendukung beberapa metode autentikasi untuk mengaktifkan aplikasi wear mandiri guna mendapatkan kredensial autentikasi pengguna.
Saat ini, Wear OS mendukung beberapa metode autentikasi berikut:
- Login dengan Google
- Dukungan OAuth 2.0
- Meneruskan token melalui lapisan data
- Autentikasi kode kustom
Bagian berikut menjelaskan cara mengintegrasikan metode autentikasi di atas ke dalam aplikasi Wear Anda.
Login dengan Google
Login dengan Google memungkinkan pengguna untuk login dengan 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. ID klien ini berbeda dengan ID klien 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, 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 tombol login dengan mengetuk 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 contoh aplikasi yang mengimplementasikan Login dengan Google, lihat contoh aplikasi.
Dukungan OAuth 2.0
Wear menyediakan dukungan OAuth 2.0 untuk aplikasi pihak ketiga agar dapat mengautentikasi pengguna dengan layanan web. Mengingat keterbatasan ruang layar pada perangkat Wear, dukungan OAuth Wear OS memungkinkan aplikasi smartwatch mandiri untuk menyelesaikan alur autentikasi OAuth melalui ponsel. Aplikasi mandiri menggunakan model URL permintaan dan respons untuk mengautentikasi pengguna dan menerima token OAuth untuk mengakses layanan.
Catatan: Jika aplikasi Wear 2.0 Anda memiliki aplikasi pendamping di ponsel, gunakan nama paket yang sama untuk aplikasi Wear dan aplikasi telepon.
Prasyarat
Sebelum mulai, buat client ID aplikasi web OAuth 2.0 untuk server backend Anda. ID klien ini berbeda dengan ID klien aplikasi Anda. Anda dapat menemukan atau membuat ID klien untuk server di Konsol API Google.
Alur
- Pengguna melakukan tindakan dengan aplikasi pihak ketiga, yang memerlukan otorisasi.
- Aplikasi pihak ketiga mengirimkan permintaan ke aplikasi pendamping Wear OS menggunakan API layanan Wear,
sendAuthorizationRequest()
, untuk membuka tampilan web dengan URL otorisasi. - Situs URL memberikan otorisasi kepada pengguna (meminta nama pengguna, sandi, dan mungkin melakukan autentikasi dua langkah, dll.).
- Setelah otorisasi berhasil atau gagal, situs akan memanggil URL callback (ke server backend aplikasi) yang ditentukan dalam permintaan dengan kode autentikasi.
- Server backend menukar kode autentikasi dengan akses dan token refresh dari server OAuth.
- Selanjutnya server backend mengalihkan respons untuk membuka aplikasi smartwatch pihak ketiga melalui aplikasi pendamping Wear OS.
- Aplikasi pendamping Wear OS menerima pengalihan tersebut dan menggunakan API dukungan Wearable,
onAuthorizationResponse()
, untuk mengirim seluruh respons dari server kembali ke aplikasi smartwatch. - Aplikasi pihak ketiga mengurai respons dari situs autentikasi dan mengekstrak token autentikasi dari respons.
- Aplikasi pihak ketiga menggunakan token autentikasi sebagai kredensial dalam permintaan selanjutnya.

Untuk mengimplementasikan alur autentikasi di atas, Anda harus melakukan langkah berikut:
- Membuat client ID dan rahasia klien.
- Menjalankan permintaan autentikasi.
- Menangani respons autentikasi.
Membuat client ID dan rahasia klien
Aplikasi Wear yang menggunakan OAuth 2.0 harus membuat client ID dan rahasia klien yang mengidentifikasi aplikasi ke penyedia OAuth. Anda perlu menyiapkan project konsol API untuk mendapatkan kredensial ini.
Menjalankan permintaan autentikasi
Untuk menjalankan permintaan autentikasi ke penyedia OAuth, buat objek klien yang akan Anda gunakan untuk membuat permintaan OAuth 2.0 terlebih dahulu dalam metode onCreate()
Anda.
Catatan: Untuk memastikan aplikasi Anda tidak nonaktif saat jam tangan beralih ke mode standby, aktifkan mode Always-On (melalui setAmbientEnabled) dalam aktivitas OAuth aplikasi Anda. Untuk informasi selengkapnya tentang praktik terbaik dalam mode standby, lihat halaman Menjaga Aplikasi Tetap Terlihat.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) oAuthClient = OAuthClient.create(this) … }
Java
@Override public void onCreate(Bundle b) { super.onCreate(b); oAuthClient = OAuthClient.create(this); … }
Selanjutnya, buat URL yang mencakup endpoint OAuth untuk mendapatkan token, client ID OAuth server Anda, URL alihan (ke server backend), dan jenis respons.
URL yang diminta mirip dengan:
https://accounts.google.com/o/oauth2/v2/auth?response_type=code &client_id="your_client_id_here"; &scope=https://www.googleapis.com/auth/plus.login &redirect_uri=https://myserver.com
Setelah membuat permintaan autentikasi, Anda dapat mengirimkan permintaan tersebut ke aplikasi pendamping menggunakan API layanan Wear, sendAuthorizationRequest()
.
Permintaan ini memicu RPC ke aplikasi pendamping, yang menyebabkan UI otorisasi ditampilkan di ponsel pengguna. Penyedia OAuth 2.0 mengautentikasi pengguna dan memperoleh izin pengguna untuk aplikasi Anda untuk mengakses cakupan yang diminta. Responsnya dikirim kembali ke server backend menggunakan URL alihan yang Anda tentukan.
Menangani respons autentikasi
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 permintaan tersebut tidak disetujui, respons akan berisi pesan error.
Respons akan berbentuk string kueri, seperti di bawah ini:
https://myserver.com/oauthtokens?code=xyz
Setelah menerima kode otorisasi, server backend dapat menukarnya dengan token akses. Kemudian server backend mengembalikan pengalihan HTTP 302 ke aplikasi ponsel Wear OS yang terdaftar sebagai penerima untuk URL formulir: https://wear.googleapis.com/3p_auth/app.html?full_suffix_from_redirect=com.your.package.name?accessToken=abc&refreshToken=xyz
.
Aplikasi ponsel memverifikasi URL respons dan meneruskan respons ke aplikasi smartwatch pihak ketiga menggunakan onAuthorizationResponse
API.
Catatan: Pastikan bahwa nama paket aplikasi adalah komponen jalur ke-3 dalam URL alihan. Jadi, redirect_uri
harus sama dengan https://wear.googleapis.com/3p_auth/<receiving app's packagename>
.
Contoh, https://wear.googleapis.com/3p_auth/com.package.name
.
Aplikasi smartwatch pihak ketiga mengekstrak token autentikasi dari respons dan menggunakannya sebagai kredensial dalam permintaan selanjutnya.
Kotlin
oAuthClient.sendAuthorizationRequest(Uri.parse(requestUrl), MyOAuthCallback())
Java
// The callback provided will be called when the OAuth request completes. oAuthClient.sendAuthorizationRequest(Uri.parse(requestUrl), new MyOAuthCallback());
Kotlin
private class MyOAuthCallback : OAuthClient.Callback() { override fun onAuthorizationResponse(requestUrl: Uri, responseUrl: Uri) { Runnable { acquireToken() accessAPI() }.apply { ... } } }
Java
private class MyOAuthCallback extends OAuthClient.Callback { @Override public void onAuthorizationResponse(Uri requestUrl, Uri responseUrl) { Runnable r = new Runnable() { public void run() { acquireToken(); accessAPI(); } }; } }
Untuk melihat implementasi lengkap dari alur di atas, lihat contoh.
Catatan: Untuk keperluan contoh ini, jam tangan menangani pertukaran token. Sebagai praktik terbaik, tetapkan URI pengalihan ke URL server Anda sendiri, di mana server dapat menjalankan pertukaran token kode otorisasi.
Meneruskan token melalui lapisan data
Opsi ini hanya dapat digunakan pada jam tangan yang tersambung ke ponsel Android. Aplikasi pendamping di ponsel dapat mentransfer data autentikasi dengan aman ke aplikasi Wear melalui Wearable Data Layer. Kredensial tersebut dapat ditransfer sebagai item data atau pesan.
- Untuk mengetahui cara mentransfer kredensial sebagai item data, lihat Mengirim dan Menyinkronkan Data.
- Untuk mendeteksi aplikasi perangkat seluler yang dapat menangani pesan dan menunjukkan aplikasi perangkat seluler Anda yang dapat menangani permintaan, lihat bagian "Memberitahukan kapabilitas" dan "Ambil node dengan kapabilitas yang diperlukan".
Catatan: Sebaiknya kirimkan APK ponsel dan APK jam tangan menggunakan nama paket yang sama. Dengan begitu aplikasi ponsel dan aplikasi wear dapat berkomunikasi melalui lapisan DataItem dan melakukan transfer token di latar belakang dari ponsel ke jam tangan untuk menyediakan autentikasi.
Alur
Anda dapat menggunakan logika bisnis Anda sendiri untuk meneruskan kredensial menggunakan Data Layer API. Diagram berikut menggambarkan salah satu cara untuk mendapatkan token melalui Wearable Data Layer.

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. Dengan metode ini, Anda dapat mengautentikasi pengguna ke aplikasi Wear 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 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 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, dan login.
- Pengguna menerima kode yang memiliki masa aktif singkat yang dimasukkan ke layar autentikasi aplikasi Wear, menggunakan keyboard yang ada di perangkat Wear 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 untuk panggilan yang diautentikasi.

Lihat juga referensi terkait berikut: