获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Mengautentikasi dengan Firebase di Platform Apple menggunakan Nomor Telepon

Anda dapat menggunakan Firebase Authentication untuk membuat pengguna login dengan mengirimkan pesan SMS ke ponsel pengguna. Pengguna masuk menggunakan kode satu kali yang terdapat dalam pesan SMS.

Cara termudah untuk menambahkan login dengan nomor telepon ke aplikasi Anda adalah dengan menggunakan FirebaseUI , yang menyertakan widget login drop-in yang menerapkan alur login untuk login dengan nomor telepon, serta login berbasis sandi dan gabungan -di. Dokumen ini menjelaskan cara menerapkan alur masuk dengan nomor telepon menggunakan SDK Firebase.

Sebelum kamu memulai

Gunakan Swift Package Manager untuk menginstal dan mengelola dependensi Firebase.

  1. Di Xcode, dengan proyek aplikasi Anda terbuka, navigasikan ke File > Add Packages .
  2. Saat diminta, tambahkan repositori SDK platform Apple Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Pilih pustaka Firebase Authentication.
  5. Setelah selesai, Xcode akan secara otomatis mulai menyelesaikan dan mengunduh dependensi Anda di latar belakang.
Dan, periksa langkah konfigurasi:
  1. Jika Anda belum menghubungkan aplikasi ke proyek Firebase, lakukan dari Firebase console .

Perhatian pada keamanan

Otentikasi hanya menggunakan nomor telepon, meskipun nyaman, kurang aman dibandingkan metode lain yang tersedia, karena kepemilikan nomor telepon dapat dengan mudah ditransfer antar pengguna. Selain itu, pada perangkat dengan beberapa profil pengguna, setiap pengguna yang dapat menerima pesan SMS dapat masuk ke akun menggunakan nomor telepon perangkat.

Jika Anda menggunakan proses masuk berbasis nomor telepon di aplikasi Anda, Anda harus menawarkannya bersama dengan metode masuk yang lebih aman, dan memberi tahu pengguna tentang pengorbanan keamanan menggunakan masuk dengan nomor telepon.

Aktifkan masuk dengan Nomor Telepon untuk proyek Firebase Anda

Untuk membuat pengguna masuk melalui SMS, Anda harus terlebih dahulu mengaktifkan metode masuk dengan Nomor Telepon untuk proyek Firebase Anda:

  1. Di Firebase console , buka bagian Otentikasi .
  2. Pada halaman Metode Masuk , aktifkan metode masuk Nomor Telepon .

Kuota permintaan masuk nomor telepon Firebase cukup tinggi sehingga sebagian besar aplikasi tidak akan terpengaruh. Namun, jika Anda perlu masuk dengan volume pengguna yang sangat tinggi dengan autentikasi telepon, Anda mungkin perlu meningkatkan paket harga Anda. Lihat halaman harga .

Aktifkan verifikasi aplikasi

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

  • Notifikasi APN senyap : Saat Anda memasukkan pengguna dengan nomor telepon mereka untuk pertama kali di perangkat, Firebase Authentication mengirimkan token ke perangkat menggunakan notifikasi push senyap. Jika aplikasi Anda berhasil menerima notifikasi dari Firebase, proses masuk dengan nomor telepon dapat dilanjutkan.

    Untuk iOS 8.0 dan yang lebih baru, notifikasi senyap tidak memerlukan persetujuan pengguna secara eksplisit dan oleh karena itu tidak terpengaruh oleh pengguna yang menolak menerima notifikasi APN di aplikasi. Dengan demikian, aplikasi tidak perlu meminta izin pengguna untuk menerima pemberitahuan push saat menerapkan autentikasi nomor telepon Firebase.

  • verifikasi reCAPTCHA : Jika mengirim atau menerima notifikasi push diam tidak memungkinkan, seperti saat pengguna menonaktifkan penyegaran latar belakang untuk aplikasi Anda, atau saat menguji aplikasi Anda di simulator iOS, Firebase Authentication menggunakan verifikasi reCAPTCHA untuk menyelesaikan telepon alur masuk. Tantangan reCAPTCHA seringkali dapat diselesaikan tanpa pengguna harus menyelesaikan apa pun.

Saat notifikasi push senyap dikonfigurasi dengan benar, hanya sebagian kecil pengguna yang akan mengalami alur reCAPTCHA. Meskipun demikian, Anda harus memastikan bahwa masuk dengan nomor telepon berfungsi dengan benar baik pemberitahuan push senyap tersedia atau tidak.

Mulai menerima notifikasi senyap

Untuk mengaktifkan notifikasi APN untuk digunakan dengan Firebase Authentication:

  1. Di Xcode, aktifkan pemberitahuan push untuk proyek Anda.
  2. Unggah kunci autentikasi APN Anda ke Firebase. Jika Anda belum memiliki kunci autentikasi APN, pastikan untuk membuatnya di Pusat Anggota Pengembang Apple .

    1. Di dalam proyek Anda di Firebase console, pilih ikon roda gigi, pilih Pengaturan Proyek , lalu pilih tab Pesan Awan .

    2. Di kunci autentikasi APN di bawah konfigurasi aplikasi iOS , klik tombol Unggah .

    3. Jelajahi lokasi tempat Anda menyimpan kunci, pilih, dan klik Buka . Tambahkan ID kunci untuk kunci tersebut (tersedia di Pusat Anggota Pengembang Apple ) dan klik Unggah .

    Jika Anda sudah memiliki sertifikat APN, Anda dapat mengunggah sertifikat tersebut.

Siapkan verifikasi reCAPTCHA

Untuk mengaktifkan SDK Firebase untuk menggunakan verifikasi reCAPTCHA:

  1. Tambahkan skema URL khusus ke proyek Xcode Anda:
    1. Buka konfigurasi proyek Anda: klik dua kali nama proyek di tampilan hierarki kiri. Pilih aplikasi Anda dari bagian TARGET , lalu pilih tab Info , dan perluas bagian Jenis URL .
    2. Klik tombol + , dan tambahkan skema URL untuk ID klien terbalik Anda. Untuk menemukan nilai ini, buka file konfigurasi GoogleService-Info.plist , dan cari kunci REVERSED_CLIENT_ID . Salin nilai kunci itu, dan tempelkan ke kotak Skema URL di halaman konfigurasi. Biarkan bidang lainnya kosong.

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

  2. Opsional : Jika Anda ingin menyesuaikan cara aplikasi menyajikan SFSafariViewController saat menampilkan reCAPTCHA kepada pengguna, buat kelas khusus yang sesuai dengan protokol AuthUIDelegate , dan teruskan ke verifyPhoneNumber(_:uiDelegate:completion:) .

Kirim kode verifikasi ke ponsel pengguna

Untuk memulai proses masuk dengan nomor telepon, berikan antarmuka kepada pengguna yang meminta mereka untuk memberikan nomor telepon mereka, lalu panggil verifyPhoneNumber(_:uiDelegate:completion:) untuk meminta Firebase mengirim kode autentikasi ke ponsel pengguna melalui SMS:

  1. Dapatkan nomor telepon pengguna.

    Persyaratan hukum berbeda-beda, tetapi sebagai praktik terbaik dan untuk menetapkan harapan bagi pengguna Anda, Anda harus memberi tahu mereka bahwa jika mereka menggunakan login melalui telepon, mereka mungkin menerima pesan SMS untuk verifikasi dan tarif standar berlaku.

  2. Panggil verifyPhoneNumber(_:uiDelegate:completion:) , dengan memberikan nomor telepon pengguna.

    Cepat

    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
      // ...
    }];

    Metode verifikasiPhoneNumber masuk kembali: jika Anda memanggilnya beberapa kali, seperti dalam metode verifyPhoneNumber onAppear , metode verifyPhoneNumber tidak akan mengirim SMS kedua kecuali waktu permintaan awal telah habis.

    Saat Anda memanggil verifyPhoneNumber(_:uiDelegate:completion:) , Firebase mengirimkan pemberitahuan push diam ke aplikasi Anda, atau mengeluarkan tantangan reCAPTCHA kepada pengguna. Setelah aplikasi Anda menerima notifikasi atau pengguna menyelesaikan tantangan reCAPTCHA, Firebase mengirim pesan SMS yang berisi kode autentikasi ke nomor telepon yang ditentukan dan meneruskan ID verifikasi ke fungsi penyelesaian Anda. Anda akan memerlukan kode verifikasi dan ID verifikasi untuk memasukkan pengguna.

    Pesan SMS yang dikirim oleh Firebase juga dapat dilokalkan dengan menentukan bahasa auth melalui properti languageCode pada instance Auth Anda.

    Cepat

     // 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 melakukannya, Anda dapat memastikan bahwa Anda masih memiliki ID verifikasi yang valid jika aplikasi Anda dihentikan sebelum pengguna menyelesaikan alur masuk (misalnya, saat beralih ke aplikasi SMS).

    Anda dapat mempertahankan ID verifikasi dengan cara apa pun yang Anda inginkan. Cara sederhana adalah menyimpan ID verifikasi dengan objek NSUserDefaults :

    Cepat

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

    Objective-C

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

    Kemudian, Anda dapat mengembalikan nilai yang disimpan:

    Cepat

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

    Objective-C

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

Jika panggilan untuk verifyPhoneNumber(_:uiDelegate:completion:) berhasil, Anda dapat meminta pengguna untuk mengetikkan kode verifikasi saat mereka menerimanya dalam pesan SMS.

Masuk pengguna dengan kode verifikasi

Setelah pengguna menyediakan aplikasi Anda dengan kode verifikasi dari pesan SMS, login pengguna dengan membuat objek FIRPhoneAuthCredential dari kode verifikasi dan ID verifikasi dan meneruskan objek itu ke signInWithCredential:completion: .

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

    Cepat

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

    Objective-C

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

    Cepat

    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;
      // ...
    }];

Tes dengan nomor telepon fiktif

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

  • Uji otentikasi nomor telepon tanpa menghabiskan kuota penggunaan Anda.
  • Uji otentikasi nomor telepon tanpa mengirim pesan SMS yang sebenarnya.
  • Jalankan tes berturut-turut dengan nomor telepon yang sama tanpa dibatasi. Ini meminimalkan risiko penolakan selama proses peninjauan App store jika pengulas kebetulan menggunakan nomor telepon yang sama untuk pengujian.
  • Uji dengan mudah di lingkungan pengembangan tanpa upaya tambahan apa pun, seperti kemampuan untuk mengembangkan dalam simulator iOS atau emulator Android tanpa Layanan Google Play.
  • Tulis tes 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 Anda menggunakan nomor telepon yang memang fiktif, dan belum ada. Firebase Authentication tidak mengizinkan Anda menyetel nomor telepon yang ada yang digunakan oleh pengguna sebenarnya sebagai nomor uji. Salah satu opsi adalah menggunakan 555 nomor awalan sebagai nomor telepon uji AS, misalnya: +1 650-555-3434
  2. Nomor telepon harus diformat dengan benar untuk panjang dan batasan lainnya. Mereka masih akan melalui validasi yang sama dengan nomor telepon pengguna sebenarnya.
  3. Anda dapat menambahkan hingga 10 nomor telepon untuk pengembangan.
  4. Gunakan nomor/kode telepon percobaan yang sulit ditebak dan sering-seringlah diubah.

Buat nomor telepon fiktif dan kode verifikasi

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

Pengujian manual

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

Saat Anda memberikan nomor telepon fiktif dan mengirim kode verifikasi, tidak ada SMS yang dikirim. Sebagai gantinya, Anda harus memberikan kode verifikasi yang dikonfigurasi sebelumnya untuk menyelesaikan proses masuk.

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

Opsi lainnya adalah menetapkan peran uji melalui klaim khusus pada pengguna ini untuk membedakan mereka sebagai pengguna palsu jika Anda ingin membatasi akses lebih lanjut.

Tes 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 pemberitahuan push diam di iOS. Ini memungkinkan pengujian otomatisasi dalam aliran ini dan lebih mudah diterapkan. Selain itu, mereka membantu memberikan kemampuan untuk menguji alur verifikasi instan di Android.

Di iOS, setelan appVerificationDisabledForTesting harus disetel ke TRUE sebelum memanggil verifyPhoneNumber . Ini diproses tanpa memerlukan token APN atau mengirim pemberitahuan push diam di latar belakang, sehingga lebih mudah untuk diuji di simulator. Ini juga menonaktifkan aliran mundur reCAPTCHA.

Perhatikan bahwa saat verifikasi aplikasi dinonaktifkan, menggunakan nomor telepon non-fiksi akan gagal menyelesaikan proses masuk. Hanya nomor telepon fiksi yang dapat digunakan dengan API ini.

Cepat

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 telepon masuk tanpa swizzling

Firebase Authentication menggunakan metode swizzling untuk mendapatkan token APN aplikasi Anda secara otomatis, untuk menangani notifikasi push diam yang dikirimkan Firebase ke aplikasi Anda, dan untuk secara otomatis mencegat pengalihan skema kustom dari halaman verifikasi reCAPTCHA selama verifikasi.

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

Jika Anda menonaktifkan swizzling, Anda harus secara eksplisit meneruskan token perangkat APN, pemberitahuan push, dan URL pengalihan skema kustom ke Firebase Authentication.

Jika Anda membuat aplikasi SwiftUI, Anda juga harus secara eksplisit meneruskan token perangkat APN, pemberitahuan push, dan URL pengalihan skema kustom ke Firebase Authentication.

Untuk mendapatkan token perangkat APN, implementasikan metode application(_:didRegisterForRemoteNotificationsWithDeviceToken:) , dan di dalamnya, berikan token perangkat ke setAPNSToken(_:type:) Auth .

Cepat

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 notifikasi push, dalam metode application(_:didReceiveRemoteNotification:fetchCompletionHandler:): periksa notifikasi terkait Firebase auth dengan memanggil metode canHandleNotification(_:) Auth .

Cepat

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; it should be handled separately.
}

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; it should be handled separately.
}

Untuk menangani URL pengalihan skema kustom, terapkan metode application(_:open:options:) , dan di dalamnya, teruskan URL ke metode canHandleURL(_:) Auth .

Cepat

func application(_ application: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  if Auth.auth().canHandle(url) {
    return true
  }
  // URL not auth related; it should be handled separately.
}

Objective-C

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

Jika Anda menggunakan SwiftUI atau UISceneDelegate , untuk menangani URL pengalihan, terapkan metode scene(_:openURLContexts:) , dan di dalamnya, teruskan URL ke metode canHandleURL(_:) Auth .

Cepat

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

Objective-C

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

Langkah selanjutnya

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

  • Di aplikasi Anda, Anda bisa mendapatkan informasi profil dasar pengguna dari objek FIRUser . Lihat Kelola Pengguna .

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

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

Untuk mengeluarkan pengguna, panggil signOut: .

Cepat

    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;
}

Anda mungkin juga ingin menambahkan kode penanganan kesalahan untuk berbagai kesalahan otentikasi. Lihat Menangani Kesalahan .