Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Melakukan Autentikasi dengan Firebase di iOS menggunakan Nomor Telepon

Anda dapat menggunakan Firebase Authentication untuk membuat pengguna login dengan mengirim pesan SMS ke ponselnya. Selanjutnya, pengguna login menggunakan kode sekali pakai yang terdapat dalam pesan SMS tersebut.

Cara termudah untuk menambahkan login dengan nomor telepon ke aplikasi adalah menggunakan FirebaseUI, yang mencakup widget login drop-in yang mengimplementasikan proses login untuk login dengan nomor telepon serta login berbasis sandi dan gabungan. Dokumen ini berisi penjelasan mengenai cara mengimplementasikan proses login dengan nomor telepon menggunakan Firebase SDK.

Sebelum memulai

  1. Tambahkan Firebase ke project iOS Anda.
  2. Sertakan pod berikut di Podfile Anda:
    pod 'Firebase/Auth'
    
  3. Jika Anda belum menghubungkan aplikasi ke project Firebase, lakukanlah dari Firebase console.

Masalah keamanan

Meskipun mudah, autentikasi hanya melalui nomor telepon kurang aman dibandingkan metode lain yang tersedia, karena nomor tersebut dapat berpindah tangan antar-pengguna dengan mudah. Selain itu, pada perangkat yang memuat beberapa profil pengguna, setiap pengguna yang dapat menerima pesan SMS dapat login ke akun menggunakan nomor telepon perangkat tersebut.

Jika menggunakan fitur login dengan nomor telepon di aplikasi, Anda harus menawarkannya bersama metode login yang lebih aman, dan memberi tahu pengguna tentang kelemahan keamanan jika menggunakan metode login dengan nomor telepon.

Mengaktifkan login dengan Nomor Telepon untuk project Firebase

Untuk memproses login melalui SMS, Anda harus terlebih dahulu mengaktifkan metode login dengan Nomor Telepon untuk project Firebase:

  1. Di Firebase console, buka bagian Authentication.
  2. Di halaman Metode Login, aktifkan metode login dengan Nomor Telepon.

Kuota permintaan login dengan nomor telepon di Firebase cukup tinggi, sehingga sebagian besar aplikasi tidak akan terpengaruh. Namun, jika perlu memproses banyak sekali login menggunakan autentikasi dengan nomor telepon, Anda mungkin harus mengupgrade paket harga. Lihat halaman harga.

Mengaktifkan verifikasi aplikasi

Untuk menggunakan autentikasi dengan nomor telepon, Firebase harus dapat memverifikasi bahwa permintaan login dengan nomor telepon berasal dari aplikasi Anda. Ada dua cara yang digunakan Firebase Authentication untuk menyelesaikan hal ini:

  • Notifikasi APNs diam: Saat Anda membuat pengguna login dengan nomor teleponnya untuk pertama kalinya di perangkat, Firebase Authentication akan mengirim token ke perangkat itu menggunakan notifikasi push diam. Jika aplikasi Anda berhasil menerima notifikasi dari Firebase tersebut, proses login dengan nomor telepon dapat dilanjutkan.

    Untuk iOS 8.0 dan yang lebih baru, notifikasi diam tidak memerlukan persetujuan pengguna yang eksplisit dan karenanya tidak terpengaruh meskipun pengguna menolak menerima notifikasi APNs di aplikasinya. Dengan kata lain, aplikasi tidak perlu meminta izin pengguna untuk menerima notifikasi push saat menerapkan autentikasi dengan nomor telepon di Firebase.

  • Verifikasi reCAPTCHA: Jika tidak dapat mengirim atau menerima notifikasi push diam, misalnya ketika pengguna menonaktifkan refresh di latar belakang untuk aplikasi Anda, atau ketika melakukan pengujian aplikasi Anda di simulator iOS, maka Firebase Authentication akan menggunakan verifikasi reCAPTCHA untuk menyelesaikan proses login dengan telepon ini. Tantangan reCAPTCHA sering kali dapat diselesaikan sekalipun pengguna tidak memecahkan tantangan apa pun.

Jika notifikasi push diam dikonfigurasi dengan benar, hanya sebagian kecil pengguna yang akan mengalami proses reCAPTCHA. Meskipun demikian, Anda harus memastikan bahwa login dengan nomor telepon ini berfungsi dengan benar terlepas dari ada tidaknya notifikasi push diam.

Mulai menerima notifikasi diam

Untuk mengaktifkan notifikasi APNs agar dapat digunakan dengan Firebase Authentication:

  1. Di Xcode, aktifkan notifikasi push untuk project Anda.
  2. Upload kunci autentikasi APNs Anda ke Firebase. Jika belum memiliki kunci autentikasi APNs, pastikan Anda membuatnya di Apple Developer Member Center.

    1. Pada project Anda di Firebase console, pilih ikon roda gigi, pilih Setelan Project, lalu pilih tab Cloud Messaging.

    2. Di kunci autentikasi APNs di bagian konfigurasi aplikasi iOS, klik tombol Upload.

    3. Buka lokasi tempat Anda menyimpan kunci, pilih kunci tersebut, lalu klik Buka. Tambahkan ID kunci untuk kunci tersebut (tersedia di Apple Developer Member Center), lalu klik Upload.

    Jika Anda sudah memiliki sertifikat APNs, Anda dapat mengupload sertifikat.

Menyiapkan verifikasi reCAPTCHA

Untuk mengaktifkan Firebase SDK agar dapat menggunakan verifikasi reCAPTCHA:

  1. Tambahkan skema URL kustom ke project Xcode Anda:
    1. Buka konfigurasi project, klik dua kali pada nama project di tampilan hierarki sebelah kiri. Pilih aplikasi dari bagian TARGETS, lalu pilih tab Info, dan perluas bagian URL Types.
    2. Klik tombol +, lalu tambahkan skema URL untuk client ID terbalik Anda. Untuk menemukan nilai ini, buka file konfigurasi GoogleService-Info.plist, lalu cari kunci REVERSED_CLIENT_ID. Salin nilai kunci tersebut, lalu tempel ke dalam kotak URL Schemes di halaman konfigurasi. Biarkan kolom lainnya kosong.

      Jika sudah selesai, konfigurasi akan terlihat seperti berikut (tetapi dengan nilai khusus aplikasi Anda):

  2. Opsional: Jika Anda ingin menyesuaikan cara aplikasi menyajikan SFSafariViewController atau UIWebView saat menampilkan reCAPTCHA kepada pengguna, buat class kustom yang sesuai dengan protokol FIRAuthUIDelegate, lalu teruskan ke verifyPhoneNumber:UIDelegate:completion:.

Mengirim kode verifikasi ke ponsel pengguna

Untuk memulai metode login dengan nomor telepon, tampilkan antarmuka yang akan meminta pengguna memasukkan nomor telepon, lalu panggil verifyPhoneNumber:UIDelegate:completion: untuk meminta agar Firebase mengirimkan kode autentikasi ke ponsel pengguna melalui SMS:

  1. Dapatkan nomor telepon pengguna.

    Persyaratan hukum dapat berbeda-beda, tetapi sebagai praktik terbaik dan demi menetapkan ekspektasi pengguna, sebaiknya informasikan bahwa jika mereka menggunakan metode login melalui telepon, akan muncul pesan SMS untuk melakukan verifikasi dan berlaku tarif standar.

  2. Panggil verifyPhoneNumber:UIDelegate:completion:, lalu teruskan ke nomor telepon pengguna.

    Swift

    PhoneAuthProvider.provider()
      .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in
          if let error = error {
            self.showMessagePrompt(error.localizedDescription)
            return
          }
          // Sign in using the verificationID and the code sent to the user
          // ...
      }

    Objective-C

    [[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput
                                            UIDelegate:nil
                                            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
      if (error) {
        [self showMessagePrompt:error.localizedDescription];
        return;
      }
      // Sign in using the verificationID and the code sent to the user
      // ...
    }];

    Ketika Anda memanggil verifyPhoneNumber:UIDelegate:completion:, Firebase akan mengirimkan notifikasi push diam ke aplikasi Anda, atau memberikan tantangan reCAPTCHA ke pengguna. Setelah aplikasi Anda menerima notifikasi atau setelah pengguna menjawab tantangan reCAPTCHA, Firebase akan mengirimkan pesan SMS yang berisi kode autentikasi ke nomor telepon yang ditentukan dan meneruskan ID verifikasi ke fungsi penyelesaian Anda. Kode verifikasi dan ID verifikasi diperlukan untuk membuat pengguna login.

    Pesan SMS yang dikirim oleh Firebase juga dapat dilokalkan dengan menentukan bahasa autentikasi melalui properti languageCode di instance Autentikasi Anda.

    Swift

     // Change language code to french.
     Auth.auth().languageCode = "fr";
    

    Objective-C

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
    
  3. Simpan ID verifikasi dan pulihkan saat aplikasi Anda dimuat. Dengan begitu, dapat dipastikan bahwa Anda masih memiliki ID verifikasi valid jika aplikasi dihentikan sebelum pengguna menyelesaikan proses login (misalnya, saat beralih ke aplikasi SMS).

    Anda dapat mempertahankan ID verifikasi dengan cara apa pun sesuai keinginan. Cara mudahnya, simpan ID verifikasi dengan objek NSUserDefaults.

    Swift

    UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
    

    Objective-C

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:verificationID forKey:@"authVerificationID"];
    

    Selanjutnya, Anda dapat memulihkan nilai yang tersimpan:

    Swift

    let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
    

    Objective-C

    NSString *verificationID = [defaults stringForKey:@"authVerificationID"];
    

Jika panggilan ke verifyPhoneNumber:UIDelegate:completion: berhasil dilakukan, Anda dapat meminta pengguna mengetik kode verifikasi saat mereka menerimanya dalam pesan SMS.

Membuat pengguna login dengan kode verifikasi

Setelah pengguna memasukkan kode verifikasi yang diterima melalui SMS ke aplikasi Anda, buat mereka login dengan membuat objek FIRPhoneAuthCredential dari kode dan ID verifikasi, lalu teruskan objek tersebut ke signInWithCredential:completion:.

  1. Dapatkan kode verifikasi dari pengguna.
  2. Buat objek FIRPhoneAuthCredential dari kode verifikasi dan ID verifikasi.

    Swift

    let credential = PhoneAuthProvider.provider().credential(
      withVerificationID: verificationID,
      verificationCode: verificationCode
    )

    Objective-C

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. Buat pengguna login dengan objek FIRPhoneAuthCredential:

    Swift

    Auth.auth().signIn(with: credential) { authResult, error in
        if let error = error {
          let authError = error as NSError
          if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue {
            // The user is a multi-factor user. Second factor challenge is required.
            let resolver = authError
              .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
            var displayNameString = ""
            for tmpFactorInfo in resolver.hints {
              displayNameString += tmpFactorInfo.displayName ?? ""
              displayNameString += " "
            }
            self.showTextInputPrompt(
              withMessage: "Select factor to sign in\n\(displayNameString)",
              completionBlock: { userPressedOK, displayName in
                var selectedHint: PhoneMultiFactorInfo?
                for tmpFactorInfo in resolver.hints {
                  if displayName == tmpFactorInfo.displayName {
                    selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
                  }
                }
                PhoneAuthProvider.provider()
                  .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil,
                                     multiFactorSession: resolver
                                       .session) { verificationID, error in
                    if error != nil {
                      print(
                        "Multi factor start sign in failed. Error: \(error.debugDescription)"
                      )
                    } else {
                      self.showTextInputPrompt(
                        withMessage: "Verification code for \(selectedHint?.displayName ?? "")",
                        completionBlock: { userPressedOK, verificationCode in
                          let credential: PhoneAuthCredential? = PhoneAuthProvider.provider()
                            .credential(withVerificationID: verificationID!,
                                        verificationCode: verificationCode!)
                          let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator
                            .assertion(with: credential!)
                          resolver.resolveSignIn(with: assertion!) { authResult, error in
                            if error != nil {
                              print(
                                "Multi factor finanlize sign in failed. Error: \(error.debugDescription)"
                              )
                            } else {
                              self.navigationController?.popViewController(animated: true)
                            }
                          }
                        }
                      )
                    }
                  }
              }
            )
          } else {
            self.showMessagePrompt(error.localizedDescription)
            return
          }
          // ...
          return
        }
        // User is signed in
        // ...
    }

    Objective-C

    [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult,
                                           NSError * _Nullable error) {
        if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
          FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
          NSMutableString *displayNameString = [NSMutableString string];
          for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
            [displayNameString appendString:tmpFactorInfo.displayName];
            [displayNameString appendString:@" "];
          }
          [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                               completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
           FIRPhoneMultiFactorInfo* selectedHint;
           for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
             if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
               selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
             }
           }
           [FIRPhoneAuthProvider.provider
            verifyPhoneNumberWithMultiFactorInfo:selectedHint
            UIDelegate:nil
            multiFactorSession:resolver.session
            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
              if (error) {
                [self showMessagePrompt:error.localizedDescription];
              } else {
                [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                     completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
                 FIRPhoneAuthCredential *credential =
                     [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                                  verificationCode:verificationCode];
                 FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
                 [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
                   if (error) {
                     [self showMessagePrompt:error.localizedDescription];
                   } else {
                     NSLog(@"Multi factor finanlize sign in succeeded.");
                   }
                 }];
               }];
              }
            }];
         }];
        }
      else if (error) {
        // ...
        return;
      }
      // User successfully signed in. Get user data from the FIRUser object
      if (authResult == nil) { return; }
      FIRUser *user = authResult.user;
      // ...
    }];

Menguji dengan nomor telepon fiktif

Anda dapat menyiapkan nomor telepon fiktif untuk pengembangan melalui Firebase console. Pengujian dengan nomor telepon fiktif memberikan sejumlah manfaat berikut:

  • Menguji autentikasi nomor telepon tanpa menghabiskan kuota penggunaan Anda.
  • Menguji autentikasi nomor telepon tanpa mengirim pesan SMS yang sebenarnya.
  • Menjalankan tes berurutan dengan nomor telepon yang sama tanpa pembatasan aliran data. Tindakan ini meminimalkan risiko penolakan selama proses peninjauan App store jika peninjau kebetulan menggunakan nomor telepon yang sama untuk melakukan pengujian.
  • Pengujian langsung di lingkungan pengembangan tanpa upaya tambahan, seperti kemampuan untuk melakukan pengembangan dalam simulator iOS atau emulator Android tanpa Layanan Google Play.
  • Menulis pengujian integrasi tanpa diblokir oleh pemeriksaan keamanan yang biasanya diterapkan pada nomor telepon asli di lingkungan produksi.

Nomor telepon fiktif harus memenuhi persyaratan berikut:

  1. Pastikan nomor telepon yang digunakan benar-benar fiktif, dan belum pernah ada. Firebase Authentication tidak mengizinkan nomor telepon yang memang ada dan digunakan oleh pengguna asli sebagai nomor telepon pengujian. Salah satu opsinya adalah menggunakan nomor berawalan 555 sebagai nomor telepon pengujian di Amerika Serikat, misalnya: +1 650-555-3434
  2. Panjang nomor telepon dan batasan lainnya harus menggunakan format yang benar. Nomor telepon tersebut akan melalui validasi yang sama seperti nomor telepon pengguna asli.
  3. Anda dapat menambahkan hingga 10 nomor telepon untuk proses pengembangan.
  4. Gunakan nomor/kode telepon pengujian yang sulit ditebak dan seringlah mengubahnya.

Membuat nomor telepon dan kode verifikasi fiktif

  1. Di Firebase console, buka bagian Authentication.
  2. Di tab Metode login, aktifkan penyedia Telepon jika belum melakukannya.
  3. Buka menu akordeon Nomor telepon untuk pengujian.
  4. Berikan nomor telepon yang ingin Anda uji, misalnya: +1 650-555-3434.
  5. Sediakan kode verifikasi 6 digit untuk nomor tersebut, misalnya: 654321.
  6. Tambahkan nomor telepon. Jika perlu, Anda dapat menghapus nomor telepon beserta kodenya dengan mengarahkan kursor ke baris yang sesuai dan mengklik ikon tempat sampah.

Pengujian manual

Anda dapat langsung mulai menggunakan nomor telepon fiktif dalam aplikasi. Hal ini memungkinkan Anda melakukan pengujian manual selama tahap pengembangan tanpa mengalami masalah kuota atau pembatasan aliran data. Anda juga dapat menguji langsung dari simulator iOS atau emulator Android tanpa menginstal Layanan Google Play.

Ketika Anda memberikan nomor telepon fiktif dan mengirim kode verifikasi, sebenarnya tidak ada SMS yang dikirim. Sebagai gantinya, Anda harus memberikan kode verifikasi yang dikonfigurasi sebelumnya untuk menyelesaikan login.

Saat login selesai, pengguna Firebase dibuat dengan nomor telepon itu. Pengguna tersebut memiliki perilaku dan properti seperti halnya pengguna nomor telepon asli dan dapat mengakses Realtime Database/Cloud Firestore serta layanan lainnya dengan cara yang sama. Token ID yang dibuat selama proses ini memiliki tanda tangan yang sama dengan pengguna nomor telepon asli.

Pilihan lainnya adalah menetapkan peran pengujian melalui klaim khusus pada pengguna ini untuk membedakannya dari pengguna palsu jika ingin membatasi akses lebih lanjut.

Pengujian integrasi

Selain pengujian manual, Firebase Authentication menyediakan API untuk membantu menulis pengujian integrasi untuk pengujian autentikasi ponsel. API ini menonaktifkan verifikasi aplikasi dengan menonaktifkan persyaratan reCAPTCHA di web dan notifikasi push senyap di iOS. Hal ini membantu memungkinkan pengujian otomatis dalam alur ini dan memudahkan implementasinya. Selain itu, API ini membantu menyediakan kemampuan untuk menguji proses verifikasi instan di Android.

Di iOS, setelan appVerificationDisabledForTesting harus disetel ke TRUE sebelum memanggil verifyPhoneNumber. Tindakan ini diproses tanpa memerlukan token APNs atau mengirim notifikasi push diam di latar belakang, sehingga lebih mudah untuk diuji di simulator. Tindakan ini juga menonaktifkan aliran fallback reCAPTCHA.

Harap perhatikan bahwa saat verifikasi aplikasi dinonaktifkan, penggunaan nomor telepon asli akan menggagalkan proses login. Hanya nomor telepon fiktif yang dapat digunakan dengan API ini.

Swift

let phoneNumber = "+16505554567"

// This test verification code is specified for the given test phone number in the developer console.
let testVerificationCode = "123456"

Auth.auth().settings.isAppVerificationDisabledForTesting = TRUE
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate:nil) {
                                                            verificationID, error in
    if (error) {
      // Handles error
      self.handleError(error)
      return
    }
    let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID ?? "",
                                                               verificationCode: testVerificationCode)
    Auth.auth().signInAndRetrieveData(with: credential) { authData, error in
      if (error) {
        // Handles error
        self.handleError(error)
        return
      }
      _user = authData.user
    }];
}];

Objective-C

NSString *phoneNumber = @"+16505554567";

// This test verification code is specified for the given test phone number in the developer console.
NSString *testVerificationCode = @"123456";

[FIRAuth auth].settings.appVerificationDisabledForTesting = YES;
[[FIRPhoneAuthProvider provider] verifyPhoneNumber:phoneNumber
                                        completion:^(NSString *_Nullable verificationID,
                                                     NSError *_Nullable error) {
    if (error) {
      // Handles error
      [self handleError:error];
      return;
    }
    FIRAuthCredential *credential =
        [FIRPhoneAuthProvider credentialWithVerificationID:verificationID
                                          verificationCode:testVerificationCode];
    [FIRAuth auth] signInWithAndRetrieveDataWithCredential:credential
                                                completion:^(FIRUser *_Nullable user,
                                                             NSError *_Nullable error) {
      if (error) {
        // Handles error
        [self handleError:error];
        return;
      }
      _user = user;
    }];
}];

Lampiran: Menggunakan login dengan ponsel tanpa swizzling

Firebase Authentication menggunakan method swizzling untuk memperoleh token APNs aplikasi secara otomatis, menangani notifikasi push diam yang dikirim Firebase ke aplikasi Anda, dan untuk menangkap pengalihan skema kustom secara otomatis dari halaman verifikasi reCAPTCHA selama verifikasi berlangsung.

Jika memilih untuk tidak menggunakan swizzling, Anda dapat menonaktifkannya dengan menambahkan tanda FirebaseAppDelegateProxyEnabled di file Info.plist aplikasi dan menyetelnya ke NO. Perlu diperhatikan bahwa penyetelan tanda ini ke NO juga akan menonaktifkan swizzling untuk produk Firebase lainnya, termasuk Firebase Cloud Messaging.

Jika menonaktifkan swizzling, Anda harus secara eksplisit meneruskan token perangkat APNs, notifikasi push, dan URL alihan skema kustom ke Firebase Authentication.

Untuk mendapatkan token perangkat APNs, terapkan metode application:didRegisterForRemoteNotificationsWithDeviceToken:, lalu di dalamnya, teruskan token perangkat ke metode setAPNSToken:type: dari FIRAuth.

Swift

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  // Pass device token to auth
  Auth.auth().setAPNSToken(deviceToken, type: .prod)

  // Further handling of the device token if needed by the app
  // ...
}

Objective-C

- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  // Pass device token to auth.
  [[FIRAuth auth] setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeProd];
  // Further handling of the device token if needed by the app.
}

Untuk menangani push notification, pada metode application:didReceiveRemoteNotification:fetchCompletionHandler:, periksa notifikasi terkait Firebase auth dengan memanggil metode canHandleNotification: dari FIRAuth.

Swift

func application(_ application: UIApplication,
    didReceiveRemoteNotification notification: [AnyHashable : Any],
    fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  if Auth.auth().canHandleNotification(notification) {
    completionHandler(.noData)
    return
  }
  // This notification is not auth related, developer should handle it.
}

Objective-C

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)notification
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // Pass notification to auth and check if they can handle it.
  if ([[FIRAuth auth] canHandleNotification:notification]) {
    completionHandler(UIBackgroundFetchResultNoData);
    return;
  }
  // This notification is not auth related, developer should handle it.
}

Untuk menangani URL alihan skema kustom, terapkan metode application:openURL:sourceApplication:annotation: untuk perangkat yang menjalankan iOS 8 dan yang lebih lama, dan metode application:openURL:options: untuk perangkat yang menjalankan iOS 9 dan yang lebih baru, lalu di dalamnya, teruskan URL ke metode canHandleURL dari FIRAuth.

Swift

// For iOS 9+
func application(_ application: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  if Auth.auth().canHandle(url) {
    return true
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
func application(_ application: UIApplication,
                 open url: URL,
                 sourceApplication: String?,
                 annotation: Any) -> Bool {
  if Auth.auth().canHandle(url) {
    Return true
  }
  // URL not auth related, developer should handle it.
}

Objective-C

// For iOS 9+
- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

Jika Anda menggunakan SwiftUI atau UISceneDelegate untuk menangani URL alihan, terapkan metode scene:openURLContexts:, dan di dalamnya, teruskan URL tersebut ke metode canHandleURL dari FIRAuth.

Swift

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
  for urlContext in URLContexts {
      let url = urlContext.url
      Auth.auth().canHandle(url)
  }
  // URL not auth related, developer should handle it.
}

Objective-C

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
  for (UIOpenURLContext *urlContext in URLContexts) {
    [FIRAuth.auth canHandleURL:urlContext.url];
    // URL not auth related, developer should handle it.
  }
}

Langkah berikutnya

Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan ditautkan ke kredensial tersebut, 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, terlepas dari cara pengguna login.

  • Di aplikasi, Anda bisa mendapatkan informasi profil dasar pengguna dari objek FIRUser. Baca bagian Mengelola Pengguna.

  • Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik yang login dari variabel auth, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.

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

Untuk memproses logout, panggil signOut:.

Swift

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

Objective-C

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Mungkin Anda juga ingin menambahkan kode penanganan error untuk berbagai error autentikasi. Lihat Menangani Error.