Menyederhanakan autentikasi menggunakan Tab Auth

Tab Auth menyediakan alur autentikasi yang aman dan disederhanakan untuk digunakan di aplikasi Android. Dengan membuat dan meluncurkan AuthTabIntent, Anda dapat memanggil Tab Kustom khusus yang dirancang untuk mengelola pengalaman autentikasi menyeluruh. Tab ini dihilangkan dan memiliki kemampuan terbatas, sehingga pengguna dapat berfokus pada tugas yang sedang dikerjakan. Setelah selesai, tab akan memanggil kembali aplikasi Anda dengan hasil menggunakan skema kustom atau https.

Tab Kustom yang memiliki fitur lengkap
Gambar 1. Tab Kustom dengan fitur lengkap.
Tab Autentikasi yang berisi fungsi minimal
Gambar 2. Tab Autentikasi dengan kemampuan minimal.

Mulai Chrome 132, Tab Autentikasi dapat langsung menggantikan integrasi autentikasi Tab Kustom yang ada. Untuk pengguna yang perangkatnya tidak mendukung Tab Autentikasi, penggantian ke Tab Kustom akan otomatis dilakukan. Bermigrasi dari Tab Khusus ke Tab Autentikasi dapat dilakukan dengan mengubah beberapa baris kode.

Cara kerjanya

Dengan Tab Autentikasi, aplikasi klien meluncurkan Tab Kustom khusus yang menampilkan jendela browser yang memuat URL dengan halaman autentikasi yang diharapkan. Setelah selesai, Tab Autentikasi akan menampilkan hasil autentikasi menggunakan callback.

Setelah autentikasi, saat navigasi ke URI pengalihan callback yang diberikan sebelumnya terjadi, pengalihan akan diambil dan ditampilkan ke aplikasi klien menggunakan callback. Untuk pengalihan yang menggunakan skema https, browser memverifikasi bahwa domain pengalihan dan aplikasi klien dimiliki oleh penayang yang sama menggunakan Digital Asset Links.

Klien menerima URI yang dinavigasi dengan skema pengalihan (atau untuk https, host dan jalur pengalihan) menggunakan callback yang disediakan. Data ini mencakup kode hasil serta data lain yang disediakan oleh antarmuka autentikasi. Anda dapat menggunakan data ini untuk memverifikasi autentikasi atau menangani skenario yang tidak berhasil.

Mengapa Tab Autentikasi?

Sebelum Tab Autentikasi, Anda dapat menggunakan intent Tab Kustom standar untuk mendukung alur autentikasi. Tab Autentikasi lebih disukai karena memberikan keamanan yang ditingkatkan, pengalaman yang disederhanakan, dan juga memisahkan beberapa internal untuk autentikasi dari kode klien. Karena alasan ini, Anda akan mendapati bahwa Tab Autentikasi memberikan pengalaman yang lebih baik.

Keamanan yang ditingkatkan

Dalam implementasi Tab Kustom standar, intent diperlukan untuk menerima data dari jendela browser yang menangani autentikasi. Hal ini memerlukan kode tambahan dan mengekspos aplikasi Anda ke potensi gangguan pada intent Anda. Dengan Tab Autentikasi, data diterima menggunakan callback, dengan transfer data langsung antara Android API dan aplikasi klien.

Pengalaman yang praktis

Di Tab Kustom, pengguna memiliki akses ke fitur tambahan di browser yang mungkin tidak diinginkan untuk alur autentikasi. Tab Autentikasi memberikan pengalaman yang lebih sederhana dengan menghapus sebagian besar opsi penyesuaian yang tersedia di Tab Kustom standar. Untuk browser Chrome, ini mencakup tombol minimalkan, menu kontekstual tekan lama, dan sentuh untuk menelusuri, serta item menu untuk Buka di Chrome, mem-bookmark, mendownload, dan membagikan, serta Tambahkan ke Layar Utama.

Tab Autentikasi masih mempertahankan fitur untuk browser guna mengisi otomatis sandi dan pembayaran yang disimpan sebelumnya, menavigasi mundur atau maju, memuat ulang, menampilkan informasi halaman, meminta versi desktop halaman, dan memberikan terjemahan.

Abstraksi data

Dengan menerapkan Tab Autentikasi saja, Anda tidak memerlukan intent untuk menerima data dari browser, serta filter intent di AndroidManifest.xml yang sebelumnya diperlukan agar autentikasi berfungsi dengan benar. Hal ini menghilangkan kompleksitas di sisi klien. Beberapa fitur ini masih dapat disertakan dalam kode klien untuk memberikan kompatibilitas mundur dengan Tab Kustom jika Tab Autentikasi tidak tersedia di perangkat pengguna.

Mengimplementasikan Tab Autentikasi

Tab Autentikasi memerlukan library autentikasi browser AndroidX. Library Browser AndroidX dapat ditambahkan di bagian dependensi file build.gradle project. API ini tersedia dalam build alfa. Tambahkan kode berikut ke file build Anda:

dependencies {
    implementation 'androidx.browser:browser:1.9.0-alpha01'
}

Sebelum meluncurkan Tab Autentikasi, deklarasikan ActivityResultLauncher yang menggunakan ActivityResultCaller serta ActivityResultCallback. Hal ini dilakukan sebelum aktivitas atau fragmen dibuat:

// In your activity

private final ActivityResultLauncher<Intent> mLauncher =
    AuthTabIntent.registerActivityResultLauncher(this, this::handleAuthResult);

private void handleAuthResult(AuthResult result) {
    String message = switch (result.resultCode) {
        case AuthTabIntent.RESULT_OK -> "Received auth result.";
        case AuthTabIntent.RESULT_CANCELED -> "AuthTab canceled.";
        case AuthTabIntent.RESULT_VERIFICATION_FAILED -> "Verification failed.";
        case AuthTabIntent.RESULT_VERIFICATION_TIMED_OUT -> "Verification timed out.";
    }

    if (result.resultCode == AuthTabIntent.RESULT_OK) {
        message += " Uri: " + result.resultUri;
    }

    Toast.makeText(this, message, Toast.LENGTH_LONG).show();  
}

Selanjutnya, gunakan AuthTabIntent.Builder untuk mem-build AuthTabIntent, lalu panggil metode launch. Metode peluncuran menerima salah satu dari dua kumpulan parameter berdasarkan skema yang Anda perlukan:

  • redirectScheme: Untuk skema pengalihan kustom, browser mengalihkan dan menampilkan URI dengan skema yang disediakan.

  • redirectHost, redirectPath: Untuk skema pengalihan https, API memerlukan host dan jalur terpisah agar browser dapat mendeteksi pengalihan dan menampilkan URI. Saat menggunakan https, verifikasi Digital Asset Links diperlukan.

private void launchAuthTab() {
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth"), "mycustomscheme");
}

private void launchAuthTabHttps() {
    String host = "your_host";
    String path = "your_path";
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);
}

Bermigrasi dari Tab Kustom ke Tab Autentikasi

Perbarui penerapan autentikasi Tab Khusus yang ada dengan mengubah intent Tab Khusus ke intent Tab Autentikasi baru. Setelah menambahkan kode, temukan intent Tab Kustom dan ubah ke intent Tab Autentikasi baru.

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
customTabsIntent.launchUrl(context, uri)

// change to -->

AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", "mycustomscheme");

/* - OR - */

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);

Kembali ke Tab Khusus

Beberapa implementasi dapat memerlukan autentikasi jika perangkat pengguna tidak dilengkapi untuk menangani Tab Autentikasi. Misalnya, hal ini dapat terjadi jika browser default tidak mendukung Tab Autentikasi atau jika versi browser default tidak berada pada tingkat yang diperlukan. Dalam hal ini, intent Tab Autentikasi akan otomatis meluncurkan Tab Khusus untuk browser yang mendukung Tab Khusus.

Untuk menangani situasi ini dengan baik, tambahkan penerapan Tab Autentikasi sambil mempertahankan kode Tab Khusus yang ada untuk menangani alur autentikasi sebagai penggantian.

Pengguna dengan perangkat yang kompatibel dengan Tab Autentikasi akan melihat alur Tab Autentikasi baru, sementara pengguna lainnya akan kembali ke implementasi Tab Kustom lama. Berhati-hatilah dalam menangani data yang dapat masuk ke ActivityResultCallback atau intent Aktivitas Anda. Perhatikan bahwa jika AuthTabIntent digunakan untuk meluncurkan pengalaman penggantian dan Tab Autentikasi tidak didukung oleh browser saat ini, aplikasi Anda akan menerima hasil Activity.RESULT_CANCELED saat tab kustom ditutup.

Contoh implementasi Tab Autentikasi dengan penggantian ke Tab Kustom dapat ditemukan di library Android Browser Helper.

Referensi lainnya