Telefon numarası kullanarak Apple Platforms'da Firebase ile kimlik doğrulama

SMS mesajı göndererek bir kullanıcının oturumunu açmak için Firebase Authentication'ı kullanabilirsiniz kullanıcının telefonuna. Kullanıcı SMS mesajı.

Uygulamanıza telefon numarası ile oturum açma bilgisi eklemenin en kolay yolu FirebaseUI, telefon için oturum açma akışlarını uygulayan bir açılır oturum açma widget'ı içerir numarayla oturum açmanın yanı sıra şifre tabanlı ve birleşik oturum açma. Bu doküman , Firebase SDK'sını kullanarak telefon numarası oturum açma akışının nasıl uygulanacağını açıklar.

Başlamadan önce

  1. Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolunu kullanın.
  2. Firebase bağımlılıklarını yükleyip yönetmek için Swift Package Manager'ı kullanın.

    1. Xcode'da, uygulama projeniz açıkken Dosya > Paket Ekle'yi tıklayın.
    2. İstendiğinde Firebase Apple platformlar SDK deposunu ekleyin:
    3.   https://github.com/firebase/firebase-ios-sdk.git
      .
    4. Firebase Authentication kitaplığını seçin.
    5. -ObjC işaretini, hedefinizin derleme ayarlarındaki Diğer Bağlayıcı İşaretleri bölümüne ekleyin.
    6. İşlemi tamamladığınızda, Xcode otomatik olarak arka planda tutmalarını sağlar.

Güvenlikle ilgili sorunlar

Yalnızca telefon numarası kullanarak kimlik doğrulama, kolay olsa da daha az güvenlidir diğer mevcut yöntemlerden farklıdır. Çünkü bir telefon numarasına sahip olmak kullanıcılar arasında kolayca aktarılabilir. Ayrıca, birden fazla kullanıcısı olan cihazlarda SMS mesajı alabilen tüm kullanıcılar bir hesapta oturum açmak için cihazın telefon numarası.

Uygulamanızda telefon numarasına dayalı oturum açma özelliği kullanıyorsanız bunu sunmalısınız güvenli oturum açma yöntemlerine yer verir ve kullanıcıları, güvenliği olumlu sonuçlar doğurabilir.

Firebase projeniz için Telefon Numarasıyla oturum açmayı etkinleştirme

Kullanıcıların SMS ile oturum açmasını sağlamak için önce Telefon Numarası oturum açma özelliğini etkinleştirmeniz gerekir yöntemi belirleyin:

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın.
  2. Oturum Açma Yöntemi sayfasında Telefon Numarası'nı etkinleştirin oturum açma yöntemini kullanabilirsiniz.

Firebase'in telefon numarası oturum açma isteği kotası, çoğu uygulamanın etkilenmez. Ancak, çok sayıda kullanıcıyla oturum açmanız gerekiyorsa Telefonla kimlik doğrulama için fiyatlandırma planınızı yükseltmeniz gerekebilir. Görüntüleyin fiyatlandırma sayfası.

Uygulama doğrulamayı etkinleştirme

Telefon numarası kimlik doğrulamasını kullanmak için Firebase'in bunu doğrulayabilmesi gerekir telefon numarası oturum açma istekleri uygulamanızdan geliyor. İki yol vardır Firebase Authentication şu işlemleri yapar:

  • Sessiz APN bildirimleri: Bir kullanıcının ilk kez kullandığında, Firebase Authentication, bir kullanıcıya cihaza gönderilen jetonları sessiz bir push bildirimi olarak göndermelidir. Uygulamanız Firebase'den bildirim başarıyla alındı, telefon numarası devam edebilir.

    iOS 8.0 ve sonraki sürümlerde sessiz bildirimlerde ve dolayısıyla da bu e-posta adresini almayı reddeden kullanıcıdan Uygulamadaki APNs bildirimleri. Bu nedenle, uygulamanın kullanıcı Firebase telefonu uygularken push bildirimleri alma izni kimlik doğrulama.

  • reCAPTCHA doğrulaması: ReCAPTCHA doğrulaması veya sessiz bir push bildirimi göndermek mümkün değildir. Örneğin, kullanıcı veya arka planda yenileme özelliğini devre dışı bıraktığınızda iOS simülatörü olan Firebase Authentication, işlemleri tamamlamak için reCAPTCHA doğrulamasını kullanır telefon oturum açma akışından bahsetmek istiyorum. reCAPTCHA testi çoğu zaman tamamlanabilir kullanıcı herhangi bir şey çözmek zorunda kalmadan.

Sessiz push bildirimleri düzgün şekilde yapılandırıldığında yalnızca çok küçük reCAPTCHA akışıyla karşılaşacak kullanıcıların yüzdesi. Yine de sessiz push olsa da olmasa da telefon numarasıyla oturum açma işleminin doğru bir şekilde çalıştığından emin olun. bildirim alınabilir.

Sessiz bildirimler almaya başla

Firebase Authentication ile kullanmak üzere APNs bildirimlerini etkinleştirmek için:

  1. Xcode'da, projeniz için push bildirimlerini etkinleştirin.
  2. APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin. Halihazırda bir APNs kimlik doğrulama anahtarınız yoksa Apple Geliştirici Üye Merkezi.

    1. Firebase konsolunda projenizin içinde, dişli simgesi, seçin Proje Ayarları'nı tıklayın ve ardından Cloud Messaging sekmesi.

    2. iOS uygulaması yapılandırması bölümündeki APN kimlik doğrulama anahtarı'nda, Yükle'yi tıklayın. düğmesini tıklayın.

    3. Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve . Anahtarın anahtar kimliğini ekleyin ( Apple Developer Member Center) oturum açın Yükle.

    Zaten bir APNs sertifikanız varsa sertifikayı yükleyebilirsiniz. .

reCAPTCHA doğrulamasını ayarlama

Firebase SDK'sının reCAPTCHA doğrulamasını kullanmasını sağlamak için:

  1. Xcode projenize özel URL şemaları ekleyin:
    1. Proje yapılandırmanızı açın: sol ağaç görünümünde yer alır. HEDEFLER bölümünden uygulamanızı seçin, ardından Bilgi sekmesini seçin ve URL Türleri bölümünü genişletin.
    2. + düğmesini tıklayın ve Kodlanmış Uygulama Kimliğinizi URL olarak ekleyin şema. Kodlanmış Uygulama Kimliğinizi şurada bulabilirsiniz: Genel Firebase konsolunun Ayarlar sayfasındaki Ayarlar bölümünde uygulamasını indirin. Diğer alanları boş bırakın.

      Tamamlandığında yapılandırmanız şuna benzer bir görünümde olacaktır: aşağıdaki (ancak uygulamaya özel değerlerinizle):

      Xcode'un özel URL şeması kurulum arayüzünün ekran görüntüsü
  2. İsteğe bağlı: Uygulamanızın Size reCAPTCHA'yı gösterirken SFSafariViewController, özel bir tane oluşturun ve AuthUIDelegate protokolüne uyan bir sınıfı belirtmelisiniz ve verifyPhoneNumber(_:uiDelegate:completion:).

Kullanıcının telefonuna doğrulama kodu gönderme

Telefon numarasıyla oturum açmayı başlatmak için kullanıcıya şunu isteyen bir arayüz sunun: telefon numarasını vermesini isteyebilir, sonra da Firebase'i istemek için verifyPhoneNumber(_:uiDelegate:completion:) Kullanıcının telefonuna SMS ile bir kimlik doğrulama kodu gönder:

  1. Kullanıcının telefon numarasını alın.

    Yasal şartlar değişiklik gösterse de en iyi uygulama olarak ve kullanıcılarınızın beklentilerini belirlemek amacıyla, kullandıkları cihazlarda doğrulama ve standart kullanım için bir SMS mesajı alabilirler. uygulanır.

  2. verifyPhoneNumber(_:uiDelegate:completion:) adlı kişiyi telefonla ara, ona yönlendir Kullanıcının telefon numarası.

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

    verifyPhoneNumber yöntemi reentrant: yöntemi (örneğin, birden çok kez çağırırsanız) bir görünümün onAppear yönteminde verifyPhoneNumber yöntemi orijinal istek zaman aşımına uğramıyorsa ikinci bir SMS gönder.

    verifyPhoneNumber(_:uiDelegate:completion:) adlı kişiyi aradığınızda, Firebase, uygulamanıza sessiz bir push bildirimi gönderir veya Kullanıcıya reCAPTCHA sorgulaması. Uygulamanız bildirimi veya kullanıcı reCAPTCHA testini tamamladığında, Firebase numaralı telefona, kimlik doğrulama kodu içeren bir SMS mesajı belirtilen telefon numarasını verir ve size bir doğrulama kimliği gönderir. işlevini kullanın. Hem doğrulama koduna hem de doğrulamaya ihtiyacınız olacak Kullanıcının oturum açmak için kullandığı kimlik.

    Firebase tarafından gönderilen SMS mesajı da Auth'unuzdaki languageCode özelliği aracılığıyla kimlik doğrulama dili kullanır.

    Swift

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

    Objective-C

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
    
  3. Doğrulama kimliğini kaydedin ve uygulamanız yüklendiğinde geri yükleyin. Böylece, Uygulamanız için hâlâ geçerli bir doğrulama kimliğinizin olduğundan kullanıcı oturum açma akışını tamamlamadan önce sonlandırıldığında (ör. (SMS uygulamasına geçin).

    Doğrulama kimliğini istediğiniz şekilde saklayabilirsiniz. Basit bir yol, doğrulama kimliğini NSUserDefaults nesnesiyle kaydedin:

    Swift

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

    Objective-C

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

    Ardından, kaydedilen değeri geri yükleyebilirsiniz:

    Swift

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

    Objective-C

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

verifyPhoneNumber(_:uiDelegate:completion:) doğrulama işlemi başarılı olursa, kullanıcıdan doğrulama kodunu SMS'le alabilirsiniz.

Doğrulama koduyla kullanıcının oturumunu açma

Kullanıcı, uygulamanıza SMS ile gönderilen doğrulama kodunu sağladıktan sonra bir FIRPhoneAuthCredential mesajı oluşturarak kullanıcının oturum açmasını sağlayın nesnesini dahil edip bu nesneyi iletmeden önce Hedef: signInWithCredential:completion:.

  1. Kullanıcıdan doğrulama kodunu alın.
  2. Doğrulamadan bir FIRPhoneAuthCredential nesnesi oluşturun kimliğinizi girin.

    Swift

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

    Objective-C

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. FIRPhoneAuthCredential nesnesiyle kullanıcının oturumunu açın:

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

Hayali telefon numaralarıyla test etme

Firebase konsolu üzerinden geliştirme için kurgusal telefon numaraları ayarlayabilirsiniz. Hayali telefonla test etme sayılar şu faydaları sağlar:

  • Kullanım kotanızı tüketmeden telefon numarası kimlik doğrulamasını test edin.
  • Gerçek bir SMS mesajı göndermeden telefon numarası kimlik doğrulamasını test edin.
  • Kısıtlamadan, aynı telefon numarasıyla art arda testler yapın. Bu Uygulama mağazası inceleme sürecinde en az test için aynı telefon numarasını kullanın.
  • Örneğin, Google Play Hizmetleri olmadan iOS simülatöründe veya Android emülatöründe geliştirme yeteneği.
  • Entegrasyon testlerini, normalde uygulanan güvenlik kontrolleri tarafından engellenmeden yaz gerçek telefon numaraları için kullandığı bir teknolojidir.

Hayali telefon numaraları aşağıdaki şartları karşılamalıdır:

  1. Gerçekten hayali olan ve daha önce var olmayan telefon numaraları kullandığınızdan emin olun. Firebase Authentication, gerçek kullanıcılar tarafından kullanılan mevcut telefon numaralarını test numarası olarak ayarlamanıza izin vermez. Seçeneklerden biri, ABD test telefon numaraları olarak 555 önekli numarayı kullanmaktır. Örneğin: +1 650-555-3434
  2. Telefon numaralarının uzunlukları ve diğer özellikleri kısıtlar. Yine de gerçek bir kullanıcının telefon numarasıyla aynı doğrulamadan geçerler.
  3. Geliştirme için en fazla 10 telefon numarası ekleyebilirsiniz.
  4. Tahmin edilmesi ve değiştirilmesi zor test telefon numaraları/kodları kullanın yapmanızı öneririm.

Hayali telefon numaraları ve doğrulama kodları oluşturma

  1. Firebase konsolunda Kimlik Doğrulama bölümüne bakın.
  2. Henüz yapmadıysanız Oturum açma yöntemi sekmesinde Telefon sağlayıcısını etkinleştirin.
  3. Test için telefon numaraları akordeon menüsünü açın.
  4. Test etmek istediğiniz telefon numarasını belirtin. Örneğin: +1 650-555-3434.
  5. Bu numara için 6 haneli doğrulama kodunu girin. Örneğin: 654321.
  6. Numarayı ekleyin. Gerekirse telefon numarasını silebilir ve fareyle ilgili satırın üzerine gelip çöp kutusu simgesini tıklayarak kodu.

Manuel test

Uygulamanızda hayali bir telefon numarasını doğrudan kullanmaya başlayabilirsiniz. Bu şekilde şunları yapabilirsiniz: Geliştirme aşamalarında kota sorunları veya kısıtlamayla karşılaşmadan manuel testler gerçekleştirme. Google Play Hizmetleri olmadan doğrudan bir iOS simülatöründen veya Android emülatöründen de test edebilirsiniz yüklendi.

Hayali telefon numarasını girip doğrulama kodunu gönderdiğinizde, gönderilir. Bunun yerine, imza işlemini tamamlamak için önceden yapılandırılmış doğrulama kodunu sağlamanız gerekir inç

Oturum açma işlemi tamamlandığında, bu telefon numarasıyla bir Firebase kullanıcısı oluşturulur. İlgili içeriği oluşturmak için kullanılan kullanıcı, gerçek bir telefon numarası kullanıcısıyla aynı davranışa ve özelliklere sahiptir; ve kullanıcı, Realtime Database/Cloud Firestore ve diğer hizmetler için aynı şekilde çalışır. sırasında basılan kimlik jetonu bu işlem gerçek bir telefon numarası kullanıcısıyla aynı imzaya sahiptir.

Diğer bir seçenek de, özel hak talepleriyle ilgili daha fazla kısıtlama uygulamak istiyorsanız erişim.

Entegrasyon testi

Firebase Authentication, manuel teste ek olarak entegrasyon testleri yazmaya yardımcı olan API'ler de sağlar telefon kimlik doğrulama testi için. Bu API'ler reCAPTCHA'yı devre dışı bırakarak uygulama doğrulamayı devre dışı bırakır. ve iOS'teki sessiz push bildirimlerinde kullanabilirsiniz. Bu sayede otomasyon testleri yapabilir ve uygulanması daha kolay olur. Ayrıca, anlık görüntü testi veya doğrulama akışı da mevcut.

iOS'te appVerificationDisabledForTesting ayarı verifyPhoneNumber numaralı telefonu aramadan önce TRUE. Bu işlem, gerek kalmadan gerçekleştirilir APNs jetonu veya arka planda sessiz push bildirimleri göndererek test etmeyi kolaylaştırır. simülatörde test etmektir. Bu işlem, reCAPTCHA yedek akışını da devre dışı bırakır.

Uygulama doğrulama devre dışı bırakıldığında hayali olmayan bir telefon numarası kullanıldığında, oturum açma tamamlanamadı. Bu API ile yalnızca hayali telefon numaraları kullanılabilir.

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

Ek: Telefonla oturum açma özelliğini ekranı kaydırmadan kullanma

Firebase Authentication, uygulamanızın bilgilerini otomatik olarak almak için kaydırma yöntemi kullanır Firebase'in gönderdiği sessiz push bildirimlerini yönetmek için APNs jetonu ve gelen izleme kodundan özel şema yönlendirmesini otomatik olarak Doğrulama sırasındaki reCAPTCHA doğrulama sayfasını

Kaydırma özelliğini kullanmak istemiyorsanız bayrağı ekleyerek bu özelliği devre dışı bırakabilirsiniz. FirebaseAppDelegateProxyEnabled - Uygulamanızın Info.plist dosyasına ve NO olarak ayarlıyorum. Bu işaretin NO olarak ayarlanmasını unutmayın Aşağıdakiler dahil olmak üzere diğer Firebase ürünlerinde de kaydırmayı devre dışı bırakır: Firebase Cloud Messaging.

Kaydırmayı devre dışı bırakırsanız APNs cihaz jetonunu, push bildirimlerini ve özel şema yönlendirme URL'sini Firebase Authentication'a yönlendirir.

Bir SwiftUI uygulaması oluşturuyorsanız APNs cihaz jetonunu, push bildirimlerini ve özel şema yönlendirme URL'sini Firebase Authentication'a yönlendirir.

APNs cihaz jetonunu almak için application(_:didRegisterForRemoteNotificationsWithDeviceToken:). yöntemini kullanmasını isteyin ve bunun içinde cihaz jetonunu Auth setAPNSToken(_:type:) yöntemi.

Swift

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

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

Objective-C

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

Push bildirimlerini yönetmek için application(_:didReceiveRemoteNotification:fetchCompletionHandler:):. yöntemi yerine şunu çağırarak Firebase kimlik doğrulamasıyla ilgili bildirimleri kontrol edin: Auth ürününün canHandleNotification(_:) yöntemi.

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

Özel şema yönlendirme URL'sini işlemek için application(_:open:options:) yöntemini kullanır ve bunların içinde URL'yi Auth canHandleURL(_:) yöntemi.

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

SwiftUI veya UISceneDelegate kullanıyorsanız yönlendirme URL'sini işlemek için scene(_:openURLContexts:) yöntemini çağırın ve bunların içinde URL'yi Auth canHandleURL(_:) yöntemi.

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

Sonraki adımlar

Kullanıcı ilk kez oturum açtığında yeni bir kullanıcı hesabı oluşturulur ve bilgileri (kullanıcı adı ve şifre, telefon numarası) Numara veya kimlik doğrulama sağlayıcı bilgileri (oturum açan kullanıcı). Bu yeni Firebase projenizin bir parçası olarak saklanır ve aşağıdaki verileri tanımlamak için kullanılabilir: nasıl oturum açarsa açsın, projenizdeki tüm uygulamalarda kullanılır.

  • Uygulamalarınızda, kullanıcıların temel profil bilgilerini şuradan alabilirsiniz: User nesnesini tanımlayın. Kullanıcıları Yönetme başlıklı makaleye göz atın.

  • Firebase Realtime Database ve Cloud Storage'ınızda Güvenlik Kuralları'nı kullanarak şunları yapabilirsiniz: auth değişkeninden, oturum açmış kullanıcının benzersiz kullanıcı kimliğini alabilirsiniz. ve kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanılır.

Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz yetkilendirme sağlayıcısının kimlik bilgilerini hesaba katılmaz.

Bir kullanıcının oturumunu kapatmak için numaralı telefonu arayın signOut: değerleridir.

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

Ayrıca tüm kimlik doğrulama aralığı için hata işleme kodu da ekleyebilirsiniz. hatalar. Hataları İşleme bölümüne bakın.