The Android Developer Challenge is back! Submit your idea before December 2.

Autentikasi di Wear

Dengan aplikasi jam tangan mandiri, aplikasi Wear OS sekarang dapat berjalan sepenuhnya pada jam tangan tanpa memerlukan aplikasi pendamping. Kapabilitas baru ini mengharuskan aplikasi mandiri Wear OS untuk mengelola autentikasinya 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 menerapkan 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 Google API 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 Sistem 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 membuat objek GoogleApiClient

Dalam metode onCreate aktivitas login Anda, konfigurasi Login dengan Google untuk meminta data pengguna yang diperlukan oleh aplikasi Anda. Lalu, 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 Anda untuk membuat pengguna Anda login saat tombol 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 ketukan tombol login dalam metode onCLick() dengan membuat intent login menggunakan 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, dalam metode onActivityResult aktivitas, ambil hasil login dengan getSignInResultFromIntent. Setelah mengambil hasil login, Anda dapat memeriksa apakah login berhasil dilakukan 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 jam tangan 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. Client ID ini berbeda dengan client ID aplikasi Anda. Anda dapat menemukan atau membuat client ID untuk server di Konsol Google API.

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 jam tangan pihak ketiga melalui aplikasi pendamping Wear OS.
  7. Aplikasi pendamping Wear OS menerima pengalihan tersebut dan menggunakan API dukungan Wearable, onAuthorizationResponse(), untuk mengirim kembali seluruh respons dari server ke aplikasi jam tangan.
  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 menerapkan alur autentikasi di atas, Anda harus:

  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, pertama-tama buat objek klien yang akan Anda gunakan untuk membuat permintaan OAuth 2.0 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 server OAuth Anda, URL alihan (ke server backend), dan jenis respons.

URL yang diminta mirip dengan berikut ini:

    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 dialihkan ke URL yang ditentukan 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. Lalu, server backend menampilkan pengalihan HTTP 302 ke aplikasi ponsel Wear OS yang terdaftar sebagai penerima untuk URL dengan bentuk: 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 meneruskannya ke aplikasi jam tangan 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>. Misalnya, https://wear.googleapis.com/3p_auth/com.package.name.

Aplikasi jam tangan 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 ini.

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.