Buka konsol

Melakukan Autentikasi Menggunakan Yahoo di Android

Anda dapat mengizinkan pengguna untuk melakukan autentikasi dengan Firebase menggunakan penyedia OAuth seperti Yahoo, dengan mengintegrasikan Login OAuth umum berbasis web ke aplikasi Anda menggunakan Firebase SDK untuk menjalankan alur login secara menyeluruh.

Sebelum memulai

Untuk membuat pengguna login menggunakan akun Yahoo, Anda harus terlebih dahulu mengaktifkan Yahoo sebagai penyedia login untuk project Firebase:

  1. Tambahkan Firebase ke project Android.

  2. Di Firebase console, buka bagian Auth.
  3. Pada tab Metode login, aktifkan penyedia Yahoo.
  4. Tambahkan ID Klien dan Rahasia Klien dari konsol developer penyedia tersebut ke konfigurasi penyedia:
    1. Untuk mendaftarkan klien Oauth Yahoo, ikuti petunjuk Yahoo tentang pendaftaran aplikasi web dengan Yahoo.
    2. Saat mendaftarkan aplikasi dengan penyedia ini, pastikan untuk mendaftarkan domain *.firebaseapp.com untuk project sebagai domain pengalihan untuk aplikasi Anda.
  5. Klik Simpan.
  6. Pada file build.gradle level project, pastikan untuk menyertakan repositori Maven Google di bagian buildscript dan allprojects Anda.

  7. Jika Anda belum menentukan sidik jari SHA-1 aplikasi, lakukanlah dari halaman Setelan di Firebase console. Lihat artikel Mengautentikasi Klien Anda untuk mengetahui detail tentang cara mendapatkan sidik jari SHA-1 aplikasi.

Memproses alur login dengan Firebase SDK

Jika Anda sedang membuat aplikasi Android, cara termudah untuk mengautentikasi pengguna dengan Firebase menggunakan akun Yahoo mereka adalah dengan memproses seluruh alur login dengan Firebase Android SDK.

Untuk memproses alur login dengan Firebase Android SDK, ikuti langkah-langkah berikut:

  1. Buat instance OAuthProvider menggunakan Builder-nya dengan ID penyedia yahoo.com.

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("yahoo.com");
    
  2. Opsional: Tentukan parameter OAuth kustom tambahan yang ingin dikirim dengan permintaan OAuth.

    // Prompt user to re-authenticate to Yahoo.
    provider.addCustomParameter("prompt", "login");
    
    // Localize to French.
    provider.addCustomParameter("language", "fr");
    

    Untuk parameter yang didukung Yahoo, lihat dokumentasi OAuth Yahoo. Perlu diperhatikan bahwa Anda tidak dapat meneruskan beberapa parameter yang diperlukan Firebase dengan setCustomParameters(). Beberapa parameter tersebut antara lain client_id, redirect_uri,response_type, scope, dan state.

  3. Opsional: Tentukan cakupan OAuth 2.0 tambahan di luar profil dasar yang ingin diminta dari penyedia autentikasi. Jika aplikasi Anda memerlukan akses ke data pengguna pribadi dari Yahoo API, Anda harus meminta izin ke Yahoo API di bagian Izin API pada konsol developer Yahoo. Cakupan OAuth yang diminta harus sama persis dengan yang sudah dikonfigurasikan sebelumnya dalam izin API aplikasi. Misalnya, jika akses baca/tulis diminta untuk kontak pengguna dan dikonfigurasikan sebelumnya dalam izin API aplikasi, sdct-w harus diteruskan, bukan cakupan OAuth sdct-r baca saja. Jika tidak, alur akan gagal dan error akan ditampilkan kepada pengguna akhir.

    List<String> scopes =
        new ArrayList<String>() {
          {
            // Request access to Yahoo Mail API.
            add("mail-r");
            // This must be preconfigured in the app's API permissions.
            add("sdct-w");
          }
        };
    provider.setScopes(scopes);
    

    Untuk mempelajari lebih lanjut, baca dokumentasi cakupan Yahoo.

  4. Lakukan autentikasi deFirebase menggunakan objek penyedia OAuth. Perlu diperhatikan bahwa tidak seperti operasi FirebaseAuth lainnya, tindakan ini akan mengendalikan UI Anda dengan memunculkan Tab Chrome Kustom. Oleh karena itu, jangan mereferensikan Aktivitas di OnSuccessListeners dan OnFailureListeners yang Anda pasang, karena listener tersebut akan segera dilepaskan ketika operasi mulai mengaktifkan UI.

    Anda harus terlebih dahulu memeriksa apakah Anda sudah menerima respons. Proses login dengan metode ini menempatkan Aktivitas Anda di background, yang berarti aktivitas tersebut dapat diperoleh kembali oleh sistem selama alur login. Untuk memastikan bahwa Anda tidak membuat pengguna mencoba lagi jika ini terjadi, Anda harus memeriksa apakah hasilnya sudah ada.

    Untuk memeriksa apakah ada hasil yang tertunda, panggil getPendingAuthResult:

    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult();
    if (pendingResultTask != null) {
      // There's something already here! Finish the sign-in for your user.
      pendingResultTask
          .addOnSuccessListener(
              new OnSuccessListener<AuthResult>() {
                @Override
                public void onSuccess(AuthResult authResult) {
                  // User is signed in.
                  // IdP data available in
                  // authResult.getAdditionalUserInfo().getProfile().
                  // The OAuth access token can be retrieved:
                  // authResult.getCredential().getAccessToken().
                  // Yahoo OAuth ID token can be retrieved:
                  // authResult.getCredential().getIdToken().
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Handle failure.
                }
              });
    } else {
      // There's no pending result so you need to start the sign-in flow.
      // See below.
    }
    

    Untuk memulai alur login, panggil startActivityForSignInWithProvider:

    firebaseAuth
        .startActivityForSignInWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is signed in.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

    Setelah berhasil diselesaikan, token akses OAuth yang terkait dengan penyedia dapat diambil dari objek OAuthCredential yang ditampilkan.

    Dengan menggunakan token akses OAuth, Anda dapat memanggil Yahoo API.

    Dengan YAHOO_USER_UID adalah ID pengguna Yahoo yang dapat diuraikan dari kolom firebaseAuth.getCurrentUser().getProviderData().get(0).getUid() atau dari authResult.getAdditionalUserInfo().getProfile().

  5. Meskipun contoh di atas berfokus pada alur login, Anda juga dapat menautkan penyedia Yahoo ke pengguna yang ada menggunakan startActivityForLinkWithProvider. Misalnya, Anda dapat menautkan beberapa penyedia ke pengguna yang sama, sehingga ia dapat login dengan salah satu penyedia tersebut.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForLinkWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // Yahoo credential is linked to the current user.
                // IdP data available in
                // authResult.getAdditionalUserInfo().getProfile().
                // The OAuth access token can be retrieved:
                // authResult.getCredential().getAccessToken().
                // Yahoo OAuth ID token can also be retrieved:
                // authResult.getCredential().getIdToken().
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    
  6. Pola yang sama dapat digunakan dengan startActivityForReauthenticateWithProvider, yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login terbaru.

    // The user is already signed-in.
    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    firebaseUser
        .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
        .addOnSuccessListener(
            new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                // User is re-authenticated with fresh tokens and
                // should be able to perform sensitive operations
                // like account deletion and email or password
                // update.
              }
            })
        .addOnFailureListener(
            new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                // Handle failure.
              }
            });
    

Langkah berikutnya

Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan dihubungkan ke kredensial, yaitu nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi, yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project Anda, terlepas dari cara pengguna login.

  • Dalam aplikasi, Anda bisa memperoleh informasi profil dasar pengguna dari objek FirebaseUser. Lihat Mengelola Pengguna.

  • Dalam Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda dapat memperoleh ID unik milik pengguna yang login dari variabel auth dan menggunakannya untuk mengontrol data yang dapat diakses pengguna.

Anda dapat mengizinkan pengguna untuk login ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

Agar pengguna logout, panggil signOut:

Java

FirebaseAuth.getInstance().signOut();

Kotlin

FirebaseAuth.getInstance().signOut()