Memproses login pengguna dengan Apple di Android

Dokumen ini menunjukkan cara menggunakan Identity Platform untuk menambahkan Login dengan Apple ke aplikasi Android Anda.

Sebelum memulai

Mengonfigurasi aplikasi dengan Apple

Di situs Apple Developer:

  1. Ikuti langkah-langkah di Mengonfigurasi Login dengan Apple untuk web. Hal ini mencakup:

    1. Mendaftarkan Return URL, yang terlihat seperti:

      https://project-id.firebaseapp.com/__/auth/handler
      
    2. Menghosting file untuk sementara di URL berikut untuk memverifikasi domain Anda:

      https://project-id.firebaseapp.com/.well-known/apple-developer-domain-association.txt
      

    Selain itu, catat Service ID dan ID tim Apple — Anda akan memerlukannya di bagian berikutnya.

  2. Menggunakan kunci pribadi Apple untuk membuat login. Anda akan memerlukan kunci dan ID-nya di bagian berikutnya.

  3. Jika Anda menggunakan Identity Platform untuk mengirim email kepada pengguna, konfigurasi project Anda dengan layanan relay email pribadi Apple menggunakan email berikut:

    noreply@project-id.firebaseapp.com
    

    Anda juga dapat menggunakan template email kustom, jika aplikasi Anda memilikinya.

Mematuhi persyaratan data anonim Apple

Apple memberi pengguna opsi untuk membuat data miliknya anonim, termasuk alamat email. Apple menetapkan alamat email yang di-obfuscate dengan domain privaterelay.appleid.com kepada pengguna yang memilih opsi ini.

Aplikasi Anda harus mematuhi kebijakan atau persyaratan developer yang berlaku dari Apple terkait ID Apple anonim. Hal ini termasuk memperoleh izin pengguna sebelum mengaitkan informasi identitas pribadi (PII) apa pun dengan ID Apple anonim. Tindakan yang melibatkan PII mencakup, tetapi tidak terbatas pada:

  • Menautkan alamat email ke ID Apple anonim, atau sebaliknya.
  • Menautkan nomor telepon ke ID Apple anonim, atau sebaliknya
  • Menautkan kredensial sosial non-anonim, seperti Facebook atau Google, ke ID Apple anonim, atau sebaliknya.

Untuk informasi selengkapnya, lihat Apple Developer Program License Agreement untuk akun developer Apple Anda.

Mengonfigurasi Apple sebagai penyedia

Untuk mengonfigurasi Apple sebagai penyedia identitas:

  1. Buka halaman Penyedia Identitas di konsol Google Cloud.

    Buka halaman Penyedia Identitas

  2. Klik Tambahkan Penyedia.

  3. Pilih Apple dari daftar.

  4. Di bagian Platform, pilih Android.

  5. Masukkan ID Layanan, ID tim Apple, ID Kunci, dan Kunci pribadi.

  6. Daftarkan domain aplikasi Anda dengan mengklik Tambahkan domain di bagian Authorized domains. Untuk tujuan pengembangan, localhost sudah diaktifkan secara default.

  7. Di bagian Konfigurasi aplikasi Anda, klik Android. Salin cuplikan ke dalam kode aplikasi Anda untuk melakukan inisialisasi SDK klien Identity Platform.

  8. Klik Save.

Memproses login pengguna dengan SDK klien

  1. Buat instance objek penyedia OAuthProvider, menggunakan ID apple.com:

    Java

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("apple.com");
    

    Kotlin

    val provider = OAuthProvider.newBuilder("apple.com")
    
  2. Opsional: Tambahkan cakupan OAuth. Cakupan menentukan data yang Anda minta dari Apple. Data yang lebih sensitif mungkin memerlukan cakupan tertentu. Secara default, jika One account per email address diaktifkan, Identity Platform akan meminta cakupan email dan name.

    Java

    List<String> scopes =
        new ArrayList<String>() {
          {
            add("email");
            add("name");
          }
        };
    provider.setScopes(scopes);
    

    Kotlin

    provider.setScopes(arrayOf("email", "name"))
    
  3. Opsional: Lokalkan alur autentikasi. Anda dapat menentukan bahasa, atau menggunakan bahasa default perangkat:

    Java

    // Localize the Apple authentication screen in French.
    provider.addCustomParameter("locale", "fr");
    

    Kotlin

    // Localize the Apple authentication screen in French.
    provider.addCustomParameter("locale", "fr");
    
  4. Buat pengguna login dengan Identity Platform.

    1. Periksa apakah respons sudah ada dengan memanggil startActivityForSignInWithProvider():

      Java

      mAuth = FirebaseAuth.getInstance();
      Task<AuthResult> pending = mAuth.getPendingAuthResult();
      if (pending != null) {
          pending.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
              @Override
              public void onSuccess(AuthResult authResult) {
                  Log.d(TAG, "checkPending:onSuccess:" + authResult);
                  // Get the user profile with authResult.getUser() and
                  // authResult.getAdditionalUserInfo(), and the ID
                  // token from Apple with authResult.getCredential().
              }
          }).addOnFailureListener(new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                  Log.w(TAG, "checkPending:onFailure", e);
              }
          });
      } else {
          Log.d(TAG, "pending: null");
      }
      

      Kotlin

      val pending = auth.pendingAuthResult
      if (pending != null) {
          pending.addOnSuccessListener { authResult ->
              Log.d(TAG, "checkPending:onSuccess:$authResult")
              // Get the user profile with authResult.getUser() and
              // authResult.getAdditionalUserInfo(), and the ID
              // token from Apple with authResult.getCredential().
          }.addOnFailureListener { e ->
              Log.w(TAG, "checkPending:onFailure", e)
          }
      } else {
          Log.d(TAG, "pending: null")
      }
      

      Proses login menempatkan Aktivitas Anda di latar belakang, yang berarti sistem dapat mengklaimnya kembali selama alur autentikasi. Memeriksa apakah hasil sudah ada atau belum akan mencegah pengguna harus login dua kali.

    2. Jika tidak ada hasil yang tertunda, panggil startActivityForSignInWithProvider():

      Java

      mAuth.startActivityForSignInWithProvider(this, provider.build())
          .addOnSuccessListener(
                  new OnSuccessListener<AuthResult>() {
                      @Override
                      public void onSuccess(AuthResult authResult) {
                          // Sign-in successful!
                          Log.d(TAG, "activitySignIn:onSuccess:" + authResult.getUser());
                          FirebaseUser user = authResult.getUser();
                          // ...
                      }
                  })
          .addOnFailureListener(
                  new OnFailureListener() {
                      @Override
                      public void onFailure(@NonNull Exception e) {
                          Log.w(TAG, "activitySignIn:onFailure", e);
                      }
                  });
      

      Kotlin

      auth.startActivityForSignInWithProvider(this, provider.build())
        .addOnSuccessListener { authResult ->
            // Sign-in successful!
            Log.d(TAG, "activitySignIn:onSuccess:${authResult.user}")
            val user = authResult.user
            // ...
        }
        .addOnFailureListener { e ->
            Log.w(TAG, "activitySignIn:onFailure", e)
        }
      

Tidak seperti banyak penyedia identitas lainnya, Apple tidak menyediakan URL foto.

Jika pengguna memilih untuk tidak membagikan email aslinya kepada aplikasi Anda, Apple akan menyediakan alamat email unik untuk dibagikan pengguna tersebut. Email ini berbentuk xyz@privaterelay.appleid.com. Jika Anda mengonfigurasi layanan relay email pribadi, Apple akan meneruskan email yang dikirim ke alamat anonim ke alamat email asli pengguna.

Apple hanya membagikan informasi pengguna, seperti nama tampilan, kepada aplikasi saat pengguna login untuk pertama kalinya. Pada umumnya, Identity Platform menyimpan data ini, yang memungkinkan Anda mengambilnya menggunakan firebase.auth().currentUser.displayName selama sesi mendatang. Namun, jika Anda mengizinkan pengguna login ke aplikasi menggunakan Apple sebelum berintegrasi dengan Identity Platform, informasi pengguna tidak akan tersedia.

Langkah selanjutnya