Mit einer Telefonnummer bei Firebase auf Apple-Plattformen authentifizieren

Du kannst Firebase Authentication verwenden, um einen Nutzer durch Senden einer SMS anzumelden auf das Smartphone der Nutzenden übertragen. Der Nutzer meldet sich mit einem einmaligen Code an, der im SMS.

Die einfachste Möglichkeit, die Anmeldung per Telefonnummer in Ihre App einzubinden, ist die Verwendung von FirebaseUI. Diese enthält ein Drop-in-Anmelde-Widget, das Anmeldeabläufe für die Anmeldung per Telefonnummer sowie die passwortbasierte und föderierte Anmeldung implementiert. In diesem Dokument wird beschrieben, wie Sie mit dem Firebase SDK einen Anmeldevorgang per Telefonnummer implementieren.

Hinweis

  1. Wenn Sie Ihre App noch nicht mit Ihrem Firebase-Projekt verbunden haben, tun Sie dies über Firebase-Konsole
  2. Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.

    1. Gehen Sie in Xcode bei geöffnetem App-Projekt zu File > Pakete hinzufügen.
    2. Fügen Sie bei entsprechender Aufforderung das Firebase Apple Platforms SDK-Repository hinzu:
    3.   https://github.com/firebase/firebase-ios-sdk.git
    4. Wählen Sie die Firebase Authentication-Bibliothek aus.
    5. Fügen Sie in den Build-Einstellungen des Ziels im Bereich Other Linker Flags das Flag -ObjC hinzu.
    6. Wenn Sie fertig, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.

Sicherheitsbedenken

Die Authentifizierung über eine Telefonnummer ist zwar praktisch, aber weniger sicher als die anderen verfügbaren Methoden, da der Besitz einer Telefonnummer leicht zwischen Nutzern übertragen werden. Auf Geräten mit mehreren Nutzern Profilen hinzugefügt, kann sich jeder Nutzer, der SMS-Nachrichten empfangen kann, über Telefonnummer des Geräts.

Wenn Sie sich in Ihrer App über eine Telefonnummer anmelden, sollten Sie diese anbieten und sicherere Anmeldemethoden nutzen und die Nutzer über die Sicherheit informieren, welche Nachteile es bei der Anmeldung über die Telefonnummer hat.

Anmeldung über die Telefonnummer für Ihr Firebase-Projekt aktivieren

Damit Nutzer per SMS angemeldet werden können, müssen Sie zuerst die Anmeldemethode „Telefonnummer“ für Ihr Firebase-Projekt aktivieren:

  1. Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung.
  2. Aktivieren Sie auf der Seite Sign-in Method (Anmeldemethode) die Option Phone Number (Telefonnummer). Anmeldemethode aus.

App-Überprüfung aktivieren

Für die Authentifizierung der Telefonnummer muss Firebase in der Lage sein, zu bestätigen, Anfragen zur Anmeldung mit einer Telefonnummer stammen von Ihrer App. Es gibt zwei Möglichkeiten, Firebase Authentication erreicht dies:

  • Lautlose APNs-Benachrichtigungen: Wenn Sie einen Nutzer mit seinem Telefonnummer zum ersten Mal auf einem Gerät verwendet, sendet Firebase Authentication eine über eine stille Push-Benachrichtigung an das Gerät. Wenn Ihre App erhält die Benachrichtigung von Firebase erfolgreich, Telefonnummer Anmeldung fortfahren.

    Ab iOS 8.0 müssen lautlose Benachrichtigungen keine expliziten Nutzereinwilligung vorliegt und ist daher nicht betroffen, wenn Nutzer ablehnen, APNs-Benachrichtigungen in der App Daher muss die App den Nutzer nicht Berechtigung, bei der Implementierung eines Firebase-Smartphones Push-Benachrichtigungen zu erhalten Zahlenauthentifizierung.

  • reCAPTCHA-Überprüfung: Wenn das Senden oder Empfangen einer stillen Push-Benachrichtigung nicht möglich ist, z. B. wenn der Nutzer die Hintergrundaktualisierung für Ihre App deaktiviert hat oder Sie Ihre App in einem iOS-Simulator testen, verwendet Firebase Authentication die reCAPTCHA-Überprüfung, um die Anmeldung auf dem Smartphone abzuschließen. Die reCAPTCHA-Herausforderung kann oft abgeschlossen werden, ohne dass der Nutzer etwas lösen muss.

Wenn stille Push-Benachrichtigungen richtig konfiguriert sind, werden nur sehr wenige Prozentsatz der Nutzer, die den reCAPTCHA-Ablauf erleben. Dennoch sollten Sie Sicherstellen, dass die Anmeldung zur Telefonnummer auch dann korrekt funktioniert Benachrichtigungen verfügbar.

Stumme Benachrichtigungen erhalten

So aktivieren Sie APNs-Benachrichtigungen zur Verwendung mit Firebase Authentication:

  1. In Xcode: Push-Benachrichtigungen für Ihr Projekt zu aktivieren.
  2. Laden Sie Ihren APNs-Authentifizierungsschlüssel in Firebase hoch. Wenn Sie noch keinen APN-Authentifizierungsschlüssel haben, erstellen Sie einen im Apple Developer Member Center.

    1. Klicken Sie in der Firebase Console in Ihrem Projekt auf das Zahnradsymbol, dann auf Projekteinstellungen und dann auf den Tab Cloud Messaging.

    2. Gehen Sie im Bereich APNs-Authentifizierungsschlüssel unter iOS-App-Konfiguration so vor: klicken Sie auf das Symbol Hochladen Schaltfläche.

    3. Gehen Sie zum Speicherort Ihres Schlüssels, wählen Sie ihn aus und klicken Sie auf Öffnen. Fügen Sie die Schlüssel-ID für den Schlüssel hinzu (verfügbar in der Apple Developer Member Center) und klicken Sie auf Hochladen:

    Wenn Sie bereits ein APNs-Zertifikat haben, können Sie es hochladen .

  3. Aktivieren Sie in Xcode die Funktion „Hintergrundmodi“ für Ihr Projekt und klicken Sie dann auf die Kästchen für die Modi Abruf im Hintergrund und Remote-Benachrichtigungen.

reCAPTCHA-Überprüfung einrichten

So aktivieren Sie die reCAPTCHA-Verifizierung für das Firebase SDK:

  1. Fügen Sie Ihrem Xcode-Projekt benutzerdefinierte URL-Schemas hinzu:
    1. Öffnen Sie die Projektkonfiguration: Doppelklicken Sie in der linken Baumansicht auf den Projektnamen. Wählen Sie im Bereich ZIELE Ihre App aus, gehen Sie dann zum Tab Info und maximieren Sie den Bereich URL-Typen.
    2. Klicken Sie auf die Schaltfläche + und fügen Sie die codierte App-ID als URL hinzu. . Ihre codierte App-ID finden Sie auf der Allgemein Einstellungen der Firebase Console im Bereich für Ihr iOS-Gerät Lassen Sie die anderen Felder leer.

      Wenn die Konfiguration abgeschlossen ist, sollte sie in etwa so aussehen wie die (aber mit Ihren anwendungsspezifischen Werten):

      Screenshot der Benutzeroberfläche zur Einrichtung benutzerdefinierter URL-Schemas in Xcode
  2. Optional: Wenn Sie anpassen möchten, wie Ihre App die Daten SFSafariViewController, wenn dem Nutzer das reCAPTCHA angezeigt wird, erstellen Sie eine benutzerdefinierte die dem Protokoll AuthUIDelegate entspricht, und übergeben Sie sie an verifyPhoneNumber(_:uiDelegate:completion:)

Bestätigungscode an die Telefonnummer des Nutzers senden

Um die Anmeldung über die Telefonnummer zu starten, müssen Sie dem Nutzer eine Oberfläche einblenden, um eine Telefonnummer anzugeben, und rufen Sie dann verifyPhoneNumber(_:uiDelegate:completion:), um Firebase anzufordern Authentifizierungscode per SMS an das Telefon des Nutzers senden:

  1. Ermitteln Sie die Telefonnummer des Nutzers.

    Als Best Practice gelten unterschiedliche rechtliche Anforderungen. und die Erwartungen der Nutzenden zu definieren, sollten Sie sie informieren, erhalten sie zur Bestätigung per SMS fallen Gebühren an.

  2. verifyPhoneNumber(_:uiDelegate:completion:) aufrufen und an diese übergeben Telefonnummer des Nutzers.

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

    Die Methode verifyPhoneNumber kommt nicht zum Einsatz: Wenn Sie sie mehrmals aufrufen, z. B. in der onAppear-Methode einer Ansicht wird die verifyPhoneNumber-Methode nicht eine zweite SMS senden, es sei denn, bei der ursprünglichen Anfrage ist eine Zeitüberschreitung aufgetreten.

    Wenn Sie verifyPhoneNumber(_:uiDelegate:completion:) anrufen, Firebase sendet eine stille Push-Benachrichtigung an Ihre App oder gibt eine reCAPTCHA-Aufgabe an den Nutzer senden. Nachdem Ihre App die oder der Nutzer löst die reCAPTCHA-Aufgabe aus, Firebase sendet eine SMS mit einem Authentifizierungscode an den angegebene Telefonnummer angegeben und eine Bestätigungs-ID an Sie übergeben . Sie benötigen sowohl den Bestätigungscode als auch die Bestätigung ID für die Anmeldung des Nutzers.

    Die von Firebase gesendete SMS kann auch lokalisiert werden, indem Sie die Authentifizierungssprache über das Attribut languageCode in Ihrer Auth-Instanz angeben.

    Swift

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

    Objective-C

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
  3. Speichern Sie die Bestätigungs-ID und stellen Sie sie wieder her, wenn die App geladen wird. Dadurch können Sie prüfen, ob Sie eine gültige Bestätigungs-ID haben, falls Ihre App werden beendet, bevor der Nutzer den Anmeldevorgang abgeschlossen hat (z. B. während zur SMS-App wechseln).

    Sie können die Bestätigungs-ID beliebig beibehalten. Eine einfache Möglichkeit besteht darin, die Bestätigungs-ID mit dem NSUserDefaults-Objekt zu speichern:

    Swift

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

    Objective-C

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

    Anschließend können Sie den gespeicherten Wert wiederherstellen:

    Swift

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

    Objective-C

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

Wenn der Aufruf von verifyPhoneNumber(_:uiDelegate:completion:) erfolgreich war, können Sie den Nutzer auffordern, den Bestätigungscode einzugeben, wenn er erhalten Sie sie per SMS.

Nutzer mit Bestätigungscode anmelden

Nachdem der Nutzer Ihrer App den Bestätigungscode aus der SMS mitgeteilt hat Nachricht senden, den Nutzer durch Erstellen einer FIRPhoneAuthCredential anmelden aus dem Bestätigungscode und der Bestätigungscode-ID zu entfernen und das Objekt zu übergeben. an signInWithCredential:completion:.

  1. Bitten Sie den Nutzer, Ihnen den Bestätigungscode zu nennen.
  2. Ein FIRPhoneAuthCredential-Objekt aus der Überprüfung erstellen und Bestätigungscode.

    Swift

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

    Objective-C

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. Melden Sie den Nutzer mit dem FIRPhoneAuthCredential-Objekt an:

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

Mit fiktiven Telefonnummern testen

Über die Firebase-Konsole können Sie fiktive Telefonnummern für die Entwicklung einrichten. Mit fiktivem Smartphone testen Zahlen bietet folgende Vorteile:

  • Testen Sie die Authentifizierung der Telefonnummer, ohne Ihr Nutzungskontingent zu verbrauchen.
  • Testen Sie die Authentifizierung der Telefonnummer, ohne eine SMS zu senden.
  • Aufeinanderfolgende Tests mit derselben Telefonnummer ausführen, ohne dass dies gedrosselt wird. Dieses minimiert das Risiko einer Ablehnung während der Überprüfung im App-Shop, falls der Prüfer die App Telefonnummer für den Test.
  • Sie können Ihre Apps ohne zusätzlichen Aufwand in Entwicklungsumgebungen testen, z. B. in einem iOS-Simulator oder einem Android-Emulator ohne Google Play-Dienste.
  • Integrationstests schreiben, ohne durch normale Sicherheitsprüfungen blockiert zu werden echte Telefonnummern in einer Produktionsumgebung verwenden.

Fiktive Telefonnummern müssen folgende Anforderungen erfüllen:

  1. Achten Sie darauf, dass die angegebenen Telefonnummern tatsächlich fiktiv sind. Mit Firebase Authentication können Sie keine Telefonnummern festlegen, die von echten Nutzern verwendet werden. Eine Möglichkeit besteht darin, als US-Testtelefonnummern Nummern mit dem Präfix „555“ zu verwenden, z. B.: +1 650-555-3434
  2. Telefonnummern müssen im Hinblick auf Länge und andere Einschränkungen. Sie durchlaufen weiterhin dieselbe Überprüfung wie die Telefonnummer eines echten Nutzers.
  3. Sie können bis zu 10 Telefonnummern für die Entwicklung hinzufügen.
  4. Verwenden Sie Testtelefonnummern/-codes, die schwer zu erraten und zu ändern sind häufig verwendet wird.

Fiktive Telefonnummern und Bestätigungscodes erstellen

  1. Öffnen Sie in der Firebase-Konsole das Authentifizierung.
  2. Aktivieren Sie auf dem Tab Anmeldemethode den Telefonanbieter, falls Sie dies noch nicht getan haben.
  3. Öffnen Sie das Akkordeonmenü Telefonnummern für Tests.
  4. Geben Sie die Telefonnummer an, die Sie testen möchten, z. B. +1 650-555-3434.
  5. Geben Sie den sechsstelligen Bestätigungscode für diese Nummer ein, z. B. 654321.
  6. Fügen Sie die Nummer hinzu. Bei Bedarf können Sie die Telefonnummer und indem Sie mit der Maus auf die entsprechende Zeile zeigen und auf das Papierkorbsymbol klicken.

Manuelle Tests

Sie können direkt in Ihrer App eine fiktive Telefonnummer verwenden. So können Sie manuelle Tests in Entwicklungsphasen ohne Kontingentprobleme oder Drosselung durchführen. Sie können Tests auch ohne die Google Play-Dienste direkt über einen iOS-Simulator oder einen Android-Emulator durchführen. installiert haben.

Wenn Sie die fiktive Telefonnummer angeben und den Bestätigungscode senden, wird keine SMS gesendet. Sie müssen stattdessen den zuvor konfigurierten Bestätigungscode angeben, um die Unterschrift abzuschließen. .

Nach der Anmeldung wird ein Firebase-Nutzer mit dieser Telefonnummer erstellt. Die das gleiche Verhalten und die gleichen Eigenschaften wie ein echter Telefonnummern-Nutzer und kann auf Realtime Database/Cloud Firestore und anderen Diensten auf dieselbe Weise verwenden. Das während des hat dieser Prozess dieselbe Signatur wie ein echter Nutzer einer Telefonnummer.

Alternativ können Sie eine Testrolle über ein benutzerdefiniertes Behauptungen auf diese Nutzer, um sie als gefälschte Nutzer zu unterscheiden, wenn Sie Zugriff haben.

Integrationstests

Zusätzlich zu manuellen Tests bietet Firebase Authentication APIs zum Schreiben von Integrationstests für Smartphone-Authentifizierungstests. Mit diesen APIs wird die App-Überprüfung deaktiviert, indem die reCAPTCHA-Anforderung im Web und die Funktion für lautlose Push-Benachrichtigungen unter iOS deaktiviert wird. Dadurch werden automatisierte Tests in und einfacher zu implementieren. Darüber hinaus ermöglichen sie es, Instant- für die Bestätigung unter Android.

Auf iOS-Geräten muss die Einstellung appVerificationDisabledForTesting wie folgt festgelegt sein: TRUE, bevor du verifyPhoneNumber aufrufst. Die Verarbeitung erfolgt ohne alle APNs-Tokens oder das Senden stiller Push-Benachrichtigungen im Hintergrund, was das Testen in einem Simulator an. Dadurch wird auch der reCAPTCHA-Fallback-Ablauf deaktiviert.

Hinweis: Wenn die App-Bestätigung deaktiviert ist, gilt die Verwendung einer nicht fiktiven Telefonnummer. die Anmeldung nicht abgeschlossen haben. Mit dieser API können nur fiktive Telefonnummern verwendet werden.

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

Anhang: Anmeldung per Smartphone ohne Wischen verwenden

Firebase Authentication verwendet das Methode-Swizzling, um das APNs-Token Ihrer App automatisch abzurufen, die stillen Push-Benachrichtigungen zu verarbeiten, die Firebase an Ihre App sendet, und die Weiterleitung über das benutzerdefinierte Schema von der reCAPTCHA-Bestätigungsseite während der Bestätigung automatisch abzufangen.

Wenn Sie das Wischen nicht verwenden möchten, können Sie es durch Hinzufügen der Markierung FirebaseAppDelegateProxyEnabled in die Info.plist-Datei Ihrer App und wenn Sie ihn auf NO setzen. Wenn Sie dieses Flag auf NO setzen, deaktiviert auch das Wischen für andere Firebase-Produkte, Firebase Cloud Messaging.

Wenn Sie Swizzling deaktivieren, müssen Sie das APNs-Gerätetoken explizit übergeben. Push-Benachrichtigungen und die Weiterleitungs-URL für das benutzerdefinierte Schema zu Firebase Authentication

Wenn Sie eine SwiftUI-Anwendung erstellen, sollten Sie auch explizit das APNs-Gerätetoken übergeben. Push-Benachrichtigungen und die Weiterleitungs-URL für das benutzerdefinierte Schema zu Firebase Authentication

Um das APNs-Gerätetoken zu erhalten, implementieren Sie die application(_:didRegisterForRemoteNotificationsWithDeviceToken:) und übergeben Sie darin das Geräte-Token an die Auth- setAPNSToken(_:type:)-Methode.

Swift

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

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

Um Push-Benachrichtigungen zu verarbeiten, application(_:didReceiveRemoteNotification:fetchCompletionHandler:): auf Firebase-Authentifizierungsbenachrichtigungen zugreifen, indem Sie Die Methode canHandleNotification(_:) von Auth.

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

Zur Verarbeitung der Weiterleitungs-URL für benutzerdefinierte Schemas implementieren Sie den application(_:open:options:)-Methode und übergeben Sie darin die URL an dieAuth canHandleURL(_:)-Methode.

Swift

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

Wenn Sie SwiftUI oder UISceneDelegate verwenden, implementieren Sie zur Verarbeitung der Weiterleitungs-URL die Methode scene(_:openURLContexts:)-Methode und übergeben Sie darin die URL an die Auth- canHandleURL(_:)-Methode.

Swift

func scene(_ scene: UIScene, openURLContexts URLContexts: Set&ltUIOpenURLContext&gt) {
  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&ltUIOpenURLContext *&gt *)URLContexts {
  for (UIOpenURLContext *urlContext in URLContexts) {
    [FIRAuth.auth canHandleURL:urlContext.url];
    // URL not auth related; it should be handled separately.
  }
}

Nächste Schritte

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, d. h. mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen zum Authentifizierungsanbieter, mit denen sich der Nutzer angemeldet hat. Diese neue -Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um in jeder App in Ihrem Projekt einen Nutzer erreichen, unabhängig davon, wie er sich anmeldet.

  • Die grundlegenden Profilinformationen der Nutzer finden Sie in Ihren Apps über die User -Objekt enthält. Weitere Informationen finden Sie unter Nutzer verwalten.

  • In Firebase Realtime Database und Cloud Storage Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen, und steuern, auf welche Daten ein Nutzer zugreifen kann.

Sie können Nutzern erlauben, sich mit Mehrfachauthentifizierung in Ihrer App anzumelden indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem eines bestehenden Nutzerkontos.

Rufen Sie auf, um einen Nutzer abzumelden. 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;
}

Sie können auch Code zur Fehlerbehandlung für den gesamten Authentifizierungsbereich hinzufügen. Fehler. Weitere Informationen finden Sie unter Fehler behandeln.