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
- Wenn Sie Ihre App noch nicht mit Ihrem Firebase-Projekt verbunden haben, tun Sie dies über Firebase-Konsole
-
Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.
- Gehen Sie in Xcode bei geöffnetem App-Projekt zu File > 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 in den Build-Einstellungen des Ziels im Bereich Other Linker Flags das Flag
-ObjC
hinzu. - Wenn Sie fertig, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.
https://github.com/firebase/firebase-ios-sdk.git
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:
- Öffnen Sie in der Firebase-Konsole den Abschnitt Authentifizierung.
- 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:
- In Xcode: Push-Benachrichtigungen für Ihr Projekt zu aktivieren.
-
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.
-
Klicken Sie in der Firebase Console in Ihrem Projekt auf das Zahnradsymbol, dann auf Projekteinstellungen und dann auf den Tab Cloud Messaging.
-
Gehen Sie im Bereich APNs-Authentifizierungsschlüssel unter iOS-App-Konfiguration so vor: klicken Sie auf das Symbol Hochladen Schaltfläche.
-
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 .
-
- 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:
- Fügen Sie Ihrem Xcode-Projekt benutzerdefinierte URL-Schemas hinzu:
- Ö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.
- 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):
- 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 ProtokollAuthUIDelegate
entspricht, und übergeben Sie sie anverifyPhoneNumber(_: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:
-
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.
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 deronAppear
-Methode einer Ansicht wird dieverifyPhoneNumber
-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";
-
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:
.
- Bitten Sie den Nutzer, Ihnen den Bestätigungscode zu nennen.
- 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];
- 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:
- 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
- Telefonnummern müssen im Hinblick auf Länge und andere Einschränkungen. Sie durchlaufen weiterhin dieselbe Überprüfung wie die Telefonnummer eines echten Nutzers.
- Sie können bis zu 10 Telefonnummern für die Entwicklung hinzufügen.
- Verwenden Sie Testtelefonnummern/-codes, die schwer zu erraten und zu ändern sind häufig verwendet wird.
Fiktive Telefonnummern und Bestätigungscodes erstellen
- Öffnen Sie in der Firebase-Konsole das Authentifizierung.
- Aktivieren Sie auf dem Tab Anmeldemethode den Telefonanbieter, falls Sie dies noch nicht getan haben.
- Öffnen Sie das Akkordeonmenü Telefonnummern für Tests.
- Geben Sie die Telefonnummer an, 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 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<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, 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.