Mit Firebase Authentication können Sie einen Nutzer anmelden, indem Sie eine SMS-Nachricht an sein Smartphone senden. Der Nutzer meldet sich mit einem Einmalcode an, der in der SMS enthalten ist.
Die einfachste Möglichkeit, die Anmeldung per Telefonnummer in Ihre App einzubinden, ist die Verwendung von FirebaseUI. Dieses enthält ein Drop-in-Anmeldewidget, das Anmeldeabläufe für die Anmeldung per Telefonnummer sowie für die passwortbasierte und die föderierte Anmeldung implementiert. In diesem Dokument wird beschrieben, wie Sie einen Anmeldeablauf per Telefonnummer mit dem Firebase SDK implementieren.
Hinweis
- Wenn Sie Ihre App noch nicht mit Ihrem Firebase-Projekt verknüpft haben, tun Sie dies in der Firebase Konsole.
-
Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.
- Öffnen Sie Ihr App-Projekt und gehen Sie in Xcode zu File > Add Packages (Datei > Pakete hinzufügen).
- Fügen Sie bei entsprechender Aufforderung das Firebase Apple Platforms SDK-Repository hinzu:
- Wählen Sie die Firebase Authentication Bibliothek aus.
- Fügen Sie das Flag
-ObjCim Bereich Other Linker Flags (Weitere Verknüpfungsmerker) der Build-Einstellungen Ihres Ziels hinzu. - Wenn Sie fertig sind, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.
https://github.com/firebase/firebase-ios-sdk.git
Sicherheitsbedenken
Die Authentifizierung nur mit einer Telefonnummer ist zwar praktisch, aber weniger sicher als die anderen verfügbaren Methoden, da der Besitz einer Telefonnummer leicht zwischen Nutzern übertragen werden kann. Außerdem können sich Nutzer auf Geräten mit mehreren Nutzerprofilen, die SMS-Nachrichten empfangen können, mit der Telefonnummer des Geräts in einem Konto anmelden.
Wenn Sie die Anmeldung per Telefonnummer in Ihrer App verwenden, sollten Sie sie zusammen mit sichereren Anmeldemethoden anbieten und Nutzer über die Sicherheitsrisiken der Anmeldung per Telefonnummer informieren.
Anmeldung per Telefonnummer für Ihr Firebase-Projekt aktivieren
Wenn sich Nutzer per SMS anmelden sollen, müssen Sie zuerst die Anmeldemethode per Telefonnummer für Ihr Firebase-Projekt aktivieren:
- Öffnen Sie in der Firebase Konsole den Bereich Authentifizierung.
- Aktivieren Sie auf der Seite Anmeldemethode die Anmeldemethode Telefonnummer.
- Legen Sie auf der Seite Einstellungen eine Richtlinie für die Regionen fest, an die SMS-Nachrichten gesendet werden dürfen. Bei neuen Projekten sind in der Standardrichtlinie keine Regionen zulässig.
App-Überprüfung aktivieren
Für die Authentifizierung per Telefonnummer muss Firebase bestätigen können, dass Anfragen zur Anmeldung per Telefonnummer von Ihrer App stammen. Dazu gibt es zwei Möglichkeiten: Firebase Authentication
- Lautlose APNs-Benachrichtigungen: Wenn sich ein Nutzer zum ersten Mal auf einem Gerät mit seiner
Telefonnummer anmeldet, sendet Firebase Authentication ein
Token über eine lautlose Push-Benachrichtigung an das Gerät. Wenn Ihre App
die Benachrichtigung von Firebase erfolgreich empfängt, kann die Anmeldung per Telefonnummer
fortgesetzt werden.
Bei iOS 8.0 und höher ist für lautlose Benachrichtigungen keine ausdrückliche Einwilligung des Nutzers erforderlich. Daher ist es unerheblich, ob ein Nutzer die Annahme von APNs-Benachrichtigungen in der App ablehnt. Die App muss also keine Nutzerberechtigung zum Empfang von Push-Benachrichtigungen anfordern, wenn die Firebase-Authentifizierung per Telefonnummer implementiert wird.
- reCAPTCHA-Überprüfung: Wenn das Senden oder Empfangen einer lautlosen Push-Benachrichtigung nicht möglich ist, z. B. wenn der Nutzer die Hintergrundaktualisierung für Ihre App deaktiviert hat oder wenn Sie Ihre App in einem iOS-Simulator testen, verwendet Firebase Authentication die reCAPTCHA-Überprüfung, um den Anmeldeablauf per Telefonnummer abzuschließen. Die reCAPTCHA-Aufgabe kann oft abgeschlossen werden, ohne dass der Nutzer etwas tun muss.
Wenn lautlose Push-Benachrichtigungen richtig konfiguriert sind, wird nur ein sehr geringer Prozentsatz der Nutzer den reCAPTCHA-Ablauf durchlaufen. Sie sollten jedoch sicherstellen, dass die Anmeldung per Telefonnummer unabhängig davon funktioniert, ob lautlose Push-Benachrichtigungen verfügbar sind.
Lautlose Benachrichtigungen erhalten
So aktivieren Sie APNs-Benachrichtigungen zur Verwendung mit Firebase Authentication:
- Aktivieren Sie in Xcode Push-Benachrichtigungen für Ihr Projekt.
-
Laden Sie Ihren APNs-Authentifizierungsschlüssel in Firebase hoch. Wenn Sie noch keinen APNs-Authentifizierungsschlüssel haben, erstellen Sie einen im Apple Developer Member Center.
-
Wählen Sie in der Firebase Console in Ihrem Projekt das Zahnradsymbol und dann Projekteinstellungen und den Tab Cloud Messaging aus.
-
Klicken Sie unter APNs-Authentifizierungsschlüssel im Abschnitt Konfiguration der iOS-App auf die Schaltfläche Hochladen , um Ihren Authentifizierungsschlüssel für die Entwicklung oder den Authentifizierungsschlüssel für die Produktion oder beide hochzuladen. Mindestens einer ist erforderlich.
-
Suchen Sie den Speicherort des 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 im Apple Developer Member Center) und klicken Sie auf Hochladen.
Wenn Sie bereits ein APNs-Zertifikat haben, können Sie stattdessen das Zertifikat hochladen.
-
- Aktivieren Sie in Xcode die Funktion „Background Modes“ (Hintergrundmodi) für Ihr Projekt und wählen Sie dann die Kästchen für die Modi **Background fetch** (Hintergrundabruf) und **Remote notifications** (Remote-Benachrichtigungen) aus.
reCAPTCHA-Überprüfung einrichten
So aktivieren Sie die reCAPTCHA-Überprüfung für das Firebase SDK:
- Fügen Sie Ihrem Xcode-Projekt benutzerdefinierte URL-Schemes hinzu:
- Öffnen Sie die Projektkonfiguration: Doppelklicken Sie in der linken Baumansicht auf den Projektnamen. Wählen Sie Ihre App im Bereich TARGETS (Ziele) aus, dann den Tab Info und maximieren Sie den Bereich URL Types (URL-Typen).
- Klicken Sie auf das + und fügen Sie Ihre codierte App-ID als URL
Scheme hinzu. Sie finden Ihre codierte App-ID auf der
Allgemeine
Einstellungen Seite der Firebase Console im Bereich für Ihre iOS
App. Lassen Sie die anderen Felder leer.
Ihre Konfiguration sollte anschließend in etwa so aussehen (aber mit Ihren anwendungsspezifischen Werten):
- Optional: Wenn Sie anpassen möchten, wie Ihre App
SFSafariViewControllerpräsentiert, wenn reCAPTCHA dem Nutzer angezeigt wird, erstellen Sie eine benutzerdefinierte Klasse, die dem ProtokollAuthUIDelegateentspricht, und übergeben Sie sie anverifyPhoneNumber(_:uiDelegate:completion:).
Bestätigungscode an das Smartphone des Nutzers senden
Um die Anmeldung per Telefonnummer zu starten, präsentieren Sie dem Nutzer eine Oberfläche, in der er seine Telefonnummer angeben kann. Rufen Sie dann verifyPhoneNumber(_:uiDelegate:completion:) auf, um Firebase aufzufordern, einen Authentifizierungscode per SMS an das Smartphone des Nutzers zu senden:
-
Rufen Sie die Telefonnummer des Nutzers ab.
Die rechtlichen Anforderungen sind unterschiedlich. Als Best Practice und um die Erwartungen Ihrer Nutzer zu erfüllen, sollten Sie sie jedoch darüber informieren, dass sie bei der Anmeldung per Telefonnummer möglicherweise eine SMS zur Bestätigung erhalten und dass die üblichen Gebühren anfallen.
- Rufen Sie
verifyPhoneNumber(_:uiDelegate:completion:)auf und übergeben Sie die 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
verifyPhoneNumberMethode ist wiederaufrufbar. Wenn Sie sie mehrmals aufrufen, z. B. in der MethodeonAppeareiner Ansicht, sendet dieverifyPhoneNumberMethode erst dann eine zweite SMS, wenn die ursprüngliche Anfrage das Zeitlimit überschritten hat.Wenn Sie
verifyPhoneNumber(_:uiDelegate:completion:)aufrufen, sendet Firebase eine lautlose Push-Benachrichtigung an Ihre App oder fordert den Nutzer auf, eine reCAPTCHA-Aufgabe zu lösen. Nachdem Ihre App die Benachrichtigung erhalten hat oder der Nutzer die reCAPTCHA-Aufgabe abgeschlossen hat, sendet Firebase eine SMS mit einem Authentifizierungscode an die angegebene Telefonnummer und übergibt eine Bestätigungs-ID an Ihre Abschlussfunktion. Sie benötigen sowohl den Bestätigungscode als auch die Bestätigungs- ID, um den Nutzer anzumelden.Die von Firebase gesendete SMS-Nachricht kann auch lokalisiert werden. Geben Sie dazu die Authentifizierungssprache über die
languageCodeProperty in Ihrer Auth Instanz an.Swift
// Change language code to french. Auth.auth().languageCode = "fr";
Objective-C
// Change language code to french. [FIRAuth auth].languageCode = @"fr";
-
Speichern Sie die Bestätigungs-ID und stellen Sie sie wieder her, wenn Ihre App geladen wird. So haben Sie weiterhin eine gültige Bestätigungs-ID, wenn Ihre App beendet wird, bevor der Nutzer den Anmeldeablauf abgeschlossen hat (z. B. beim Wechsel zur SMS-App).
Sie können die Bestätigungs-ID auf beliebige Weise speichern. Eine einfache Möglichkeit ist, die Bestätigungs-ID mit dem
NSUserDefaultsObjekt 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 ist, können Sie den Nutzer auffordern, den Bestätigungscode einzugeben, wenn er ihn in der SMS-Nachricht erhält.
Nutzer mit dem Bestätigungscode anmelden
Nachdem der Nutzer Ihrer App den Bestätigungscode aus der SMS
Nachricht zur Verfügung gestellt hat, melden Sie ihn an, indem Sie ein FIRPhoneAuthCredential
Objekt aus dem Bestätigungscode und der Bestätigungs-ID erstellen und dieses Objekt
an signInWithCredential:completion: übergeben.
- Rufen Sie den Bestätigungscode vom Nutzer ab.
- Erstellen Sie ein
FIRPhoneAuthCredential-Objekt aus dem Bestätigungscode und der Bestätigungs-ID.Swift
let credential = PhoneAuthProvider.provider().credential( withVerificationID: verificationID, verificationCode: verificationCode )
Objective-C
FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID verificationCode:userInput];
- Melden Sie den Nutzer mit dem Objekt
FIRPhoneAuthCredentialan: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
Sie können in der Firebase Console fiktive Telefonnummern für die Entwicklung einrichten. Tests mit fiktiven Telefonnummern bieten folgende Vorteile:
- Sie können die Authentifizierung per Telefonnummer testen, ohne Ihr Nutzungskontingent zu verbrauchen.
- Sie können die Authentifizierung per Telefonnummer testen, ohne eine tatsächliche SMS-Nachricht zu senden.
- Sie können aufeinanderfolgende Tests mit derselben Telefonnummer ausführen, ohne dass es zu Drosselung kommt. Dadurch wird das Risiko einer Ablehnung während der App Store-Überprüfung minimiert, wenn der Prüfer dieselbe Telefonnummer für Tests verwendet.
- Sie können in Entwicklungsumgebungen ohne zusätzlichen Aufwand testen, z. B. in einem iOS-Simulator oder einem Android-Emulator ohne Google Play-Dienste.
- Sie können Integrationstests schreiben, ohne von Sicherheitsprüfungen blockiert zu werden, die normalerweise auf echte Telefonnummern in einer Produktionsumgebung angewendet werden.
Fiktive Telefonnummern müssen die folgenden Anforderungen erfüllen:
- Verwenden Sie Telefonnummern, die tatsächlich fiktiv sind und noch nicht existieren. Firebase Authentication lässt nicht zu, dass Sie vorhandene Telefonnummern, die von echten Nutzern verwendet werden, als Testnummern festlegen. Eine Möglichkeit besteht darin, Nummern mit der Vorwahl 555 als US-Testtelefonnummern zu verwenden, z. B.: +1 650-555-3434
- Telefonnummern müssen hinsichtlich Länge und anderer Einschränkungen korrekt formatiert sein. Sie durchlaufen dieselbe Überprüfung wie die Telefonnummer eines echten Nutzers.
- Sie können bis zu zehn Telefonnummern für die Entwicklung hinzufügen.
- Verwenden Sie Testtelefonnummern und ‑codes, die schwer zu erraten sind, und ändern Sie sie häufig.
Fiktive Telefonnummern und Bestätigungscodes erstellen
- Öffnen Sie in der Firebase Konsole den Authentifizierung-Bereich.
- Aktivieren Sie auf dem Tab Anmeldemethode den Telefonanbieter, falls noch nicht geschehen.
- Öffnen Sie das Akkordeonmenü Telefonnummern zum Testen.
- Geben Sie die Telefonnummer ein, die Sie testen möchten, z. B. +1 650-555-3434.
- Geben Sie den sechsstelligen Bestätigungscode für diese Nummer ein, z. B. 654321.
- Fügen Sie die Nummer hinzu. Bei Bedarf können Sie die Telefonnummer und den zugehörigen Code löschen. Bewegen Sie dazu den Mauszeiger auf die entsprechende Zeile und klicken Sie auf das Papierkorbsymbol.
Manuelle Tests
Sie können sofort eine fiktive Telefonnummer in Ihrer Anwendung verwenden. So können Sie während der Entwicklungsphasen manuelle Tests durchführen, ohne auf Kontingentprobleme oder Drosselung zu stoßen. Sie können auch direkt in einem iOS-Simulator oder Android-Emulator testen, ohne dass Google Play-Dienste installiert sind.
Wenn Sie die fiktive Telefonnummer angeben und den Bestätigungscode senden, wird keine tatsächliche SMS gesendet. Stattdessen müssen Sie den zuvor konfigurierten Bestätigungscode angeben, um die Anmeldung abzuschließen.
Nach Abschluss der Anmeldung wird ein Firebase-Nutzer mit dieser Telefonnummer erstellt. Der Nutzer hat dasselbe Verhalten und dieselben Eigenschaften wie ein echter Nutzer mit Telefonnummer und kann auf dieselbe Weise auf Realtime Database/Cloud Firestore und andere Dienste zugreifen. Das während dieses Vorgangs erstellte ID-Token hat dieselbe Signatur wie das eines echten Nutzers mit Telefonnummer.
Alternativ können Sie diesen Nutzern über benutzerdefinierte Ansprüche eine Testrolle zuweisen, um sie als gefälschte Nutzer zu kennzeichnen, wenn Sie den Zugriff weiter einschränken möchten.
Integrationstests
Zusätzlich zu manuellen Tests bietet Firebase Authentication APIs, mit denen Sie Integrationstests für die Authentifizierung per Telefonnummer schreiben können. Mit diesen APIs wird die App-Überprüfung deaktiviert, indem die reCAPTCHA-Anforderung im Web und lautlose Push-Benachrichtigungen unter iOS deaktiviert werden. Dadurch sind automatisierte Tests in diesen Abläufen möglich und einfacher zu implementieren. Außerdem können Sie damit Abläufe für die sofortige Bestätigung unter Android testen.
Unter iOS muss die Einstellung appVerificationDisabledForTesting auf TRUE gesetzt sein, bevor verifyPhoneNumber aufgerufen wird. Dieser Vorgang wird ohne APNs-Token oder das Senden lautloser Push-Benachrichtigungen im Hintergrund verarbeitet, was das Testen in einem Simulator erleichtert. Außerdem wird der reCAPTCHA-Fallback-Ablauf deaktiviert.
Wenn die App-Überprüfung deaktiviert ist, kann die Anmeldung mit einer nicht fiktiven Telefonnummer nicht abgeschlossen werden. 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 let error = error { // Handles error self.handleError(error) return } let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID ?? "", verificationCode: testVerificationCode) Auth.auth().signIn(with: credential) { authResult, error in if let error = error { // Handles error self.handleError(error) return } _user = authResult.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; }]; }];
Anmeldung per Telefonnummer ohne Swizzling verwenden
Firebase Authentication verwendet Method Swizzling, um automatisch das APNs-Token Ihrer App abzurufen, die lautlosen Push-Benachrichtigungen zu verarbeiten, die Firebase an Ihre App sendet, und die Weiterleitung des benutzerdefinierten Schemas von der reCAPTCHA-Überprüfungsseite während der Überprüfung automatisch abzufangen.
Wenn Sie Swizzling nicht verwenden möchten, können Sie es deaktivieren, indem Sie das Flag FirebaseAppDelegateProxyEnabled zur Info.plist-Datei Ihrer App hinzufügen und es auf NO setzen. Wenn Sie dieses Flag auf NO
setzen, wird Swizzling auch für andere Firebase-Produkte deaktiviert, einschließlich
Firebase Cloud Messaging.
Wenn Sie Swizzling deaktivieren, müssen Sie das APNs-Gerätetoken, Push-Benachrichtigungen und die Weiterleitungs-URL des benutzerdefinierten Schemas explizit an Firebase Authentication übergeben.
Wenn Sie eine SwiftUI-Anwendung erstellen, müssen Sie das APNs-Gerätetoken, Push-Benachrichtigungen und die Weiterleitungs-URL des benutzerdefinierten Schemas ebenfalls explizit an Firebase Authentication übergeben.
Implementieren Sie die Methode application(_:didRegisterForRemoteNotificationsWithDeviceToken:), um das APNs-Gerätetoken abzurufen, und übergeben Sie darin das Gerätetoken an die Methode setAPNSToken(_:type:) von Auth.
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. }
Prüfen Sie in der Methode application(_:didReceiveRemoteNotification:fetchCompletionHandler:): auf Firebase Authentication-bezogene Benachrichtigungen, indem Sie die Methode canHandleNotification(_:) von Auth aufrufen.
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. }
Implementieren Sie die Methode application(_:open:options:), um die Weiterleitungs-URL des benutzerdefinierten Schemas zu verarbeiten, und übergeben Sie darin die URL an die Methode canHandleURL(_:) von Auth.
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 die Methode scene(_:openURLContexts:), um die Weiterleitungs-URL zu verarbeiten, und übergeben Sie darin die URL an die Methode canHandleURL(_:) von Auth.
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; 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. } }
Nächste Schritte
Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, d. h. mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps Ihres Projekts zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem
UserObjekt abrufen. Weitere Informationen finden Sie unter Nutzer verwalten. In den Firebase Realtime Database und Cloud Storage Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
authabrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern erlauben, sich mit mehreren Authentifizierungs anbietern in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Rufen Sie
signOut: auf, um einen Nutzer abzumelden.
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 alle Authentifizierungs fehler hinzufügen. Weitere Informationen finden Sie unter Fehler behandeln.