Bergabunglah bersama kami di ⁠#Android11: The Beta Launch Show pada tanggal 3 Juni!

Autentikasi di Wear

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:

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:

  1. Mengonfigurasi Login dengan Google.
  2. Menambahkan tombol Login dengan Google.
  3. 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

  1. Tambahkan SignInButton ke tata letak aplikasi Anda.
  2.      <com.google.android.gms.common.SignInButton
         android:id="@+id/sign_in_button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
        
  3. Dalam metode onCreate() aplikasi Anda , daftarkan OnClickListener tombol untuk membuat pengguna login saat diklik.
  4. 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

  1. Pengguna melakukan tindakan dengan aplikasi pihak ketiga, yang memerlukan otorisasi.
  2. Aplikasi pihak ketiga mengirimkan permintaan ke aplikasi pendamping Wear OS menggunakan API layanan Wear, sendAuthorizationRequest(), untuk membuka tampilan web dengan URL otorisasi.
  3. Situs URL memberikan otorisasi kepada pengguna (meminta nama pengguna, sandi, dan mungkin melakukan autentikasi dua langkah, dll.).
  4. Setelah otorisasi berhasil atau gagal, situs akan memanggil URL callback (ke server backend aplikasi) yang ditentukan dalam permintaan dengan kode autentikasi.
  5. Server backend menukar kode autentikasi dengan akses dan token refresh dari server OAuth.
  6. Selanjutnya server backend mengalihkan respons untuk membuka aplikasi smartwatch pihak ketiga melalui aplikasi pendamping Wear OS.
  7. Aplikasi pendamping Wear OS menerima pengalihan tersebut dan menggunakan API dukungan Wearable, onAuthorizationResponse(), untuk mengirim seluruh respons dari server kembali ke aplikasi smartwatch.
  8. Aplikasi pihak ketiga mengurai respons dari situs autentikasi dan mengekstrak token autentikasi dari respons.
  9. Aplikasi pihak ketiga menggunakan token autentikasi sebagai kredensial dalam permintaan selanjutnya.

Untuk mengimplementasikan alur autentikasi di atas, Anda harus melakukan langkah berikut:

  1. Membuat client ID dan rahasia klien.
  2. Menjalankan permintaan autentikasi.
  3. 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.

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:

  1. Pengguna melakukan tindakan pada aplikasi pihak ketiga, yang memerlukan otorisasi.
  2. Aplikasi Wear pihak ketiga menampilkan layar autentikasi kepada pengguna dan memintanya memasukkan kode dari URL yang ditentukan.
  3. Pengguna beralih ke perangkat seluler/tablet atau PC, meluncurkan browser, membuka URL yang ditentukan di aplikasi Wear, dan login.
  4. 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:

  5. 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.