Apple Platformlarında Google ile Oturum Açma Özelliğini Kullanarak Kimlik Doğrula

Kullanıcılarınızın Google Hesaplarını kullanarak Firebase ile kimlik doğrulamalarını aşağıdaki şekilde sağlayabilirsiniz: uygulamanıza entegre ederek daha iyi bir deneyim sunar.

Başlamadan önce

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.

Google ile Oturum Açma SDK'sını projenize ekleme

  1. Xcode'da, uygulama projeniz açıkken Dosya > Paket Ekle'yi tıklayın.

  2. İstendiğinde Google ile Oturum Açma SDK'sı deposunu ekleyin:

    https://github.com/google/GoogleSignIn-iOS
    
  3. İşlemi tamamladığınızda, Xcode otomatik olarak arka planda tutmalarını sağlar.

Firebase projeniz için Google ile Oturum Açma özelliğini etkinleştirme

Kullanıcıların Google ile Oturum Açma özelliğini kullanarak oturum açmasına izin vermek için önce Firebase projeniz için Google ile Oturum Açma sağlayıcısı:

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın.
  2. Oturum açma yöntemi sekmesinde, Google sağlayıcısını etkinleştirin.
  3. Kaydet'i tıklayın.

  4. Projenizin GoogleService-Info.plist dosyasının yeni bir kopyasını indirin ve Xcode projenize kopyalayın. Mevcut sürümlerin üzerine yeni bir. (Firebase'i iOS cihazınıza ekleme başlıklı makaleyi inceleyin) projesi) ekleyin.)

Gerekli başlık dosyalarını içe aktarın

Öncelikle, Firebase SDK'sı ve Google ile Oturum Açma SDK'sı başlık dosyalarını en iyi şekilde yararlanabilirsiniz.

Swift

import FirebaseCore
import FirebaseAuth
import GoogleSignIn

Objective-C

@import FirebaseCore;
@import GoogleSignIn;

Google ile Oturum Açma hizmetini uygula

Aşağıdaki adımları uygulayarak Google ile Oturum Açma özelliğini uygulayın. Bkz. Google ile Oturum Açma geliştirici belgelerine bakın iOS ile oturum açın.

  1. Xcode projenize özel URL şemaları ekleyin:
    1. Proje yapılandırmanızı açın: Soldaki ağaçta proje adını tıklayın görünüm. 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 geri almak için bir URL şeması ekleyin girin. Bu değeri bulmak için GoogleService-Info.plist yapılandırma dosyasını REVERSED_CLIENT_ID tuşuna basın. Bu anahtarın değerini kopyalayın, ve yapılandırma sayfasındaki URL Şemaları kutusuna yapıştırın. Diğer alanları değiştirmeden 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):

  2. Uygulamanızdaki yetki verilmiş kullanıcının application:didFinishLaunchingWithOptions: hesabında yöntemini kullanıyorsanız FirebaseApp nesnesini yapılandırın.

    Swift

    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. Uygulamanızın application:openURL:options: yöntemini uygulayın izin ver. Yöntem, handleURL şu URL'yi düzgün bir şekilde işleyecek: GIDSignIn örneği sonunda alınacağını belirler.

    Swift

    func application(_ app: UIApplication,
                     open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
      return GIDSignIn.sharedInstance.handle(url)
    }
    

    Objective-C

    - (BOOL)application:(nonnull UIApplication *)application
                openURL:(nonnull NSURL *)url
                options:(nonnull NSDictionary<NSString *, id> *)options {
      return [[GIDSignIn sharedInstance] handleURL:url];
    }
    
  4. Uygulamanızın sunum görünümü denetleyicisini ve istemci kimliğini signIn yöntemini seçin ve Firebase oluşturun Ortaya çıkan Google kimlik doğrulama jetonundan elde edilen kimlik doğrulama kimlik bilgisi:

    Swift

    guard let clientID = FirebaseApp.app()?.options.clientID else { return }
    
    // Create Google Sign In configuration object.
    let config = GIDConfiguration(clientID: clientID)
    GIDSignIn.sharedInstance.configuration = config
    
    // Start the sign in flow!
    GIDSignIn.sharedInstance.signIn(withPresenting: self) { [unowned self] result, error in
      guard error == nil else {
        // ...
      }
    
      guard let user = result?.user,
        let idToken = user.idToken?.tokenString
      else {
        // ...
      }
    
      let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                     accessToken: user.accessToken.tokenString)
    
      // ...
    }
    

    Objective-C

    GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID];
    [GIDSignIn.sharedInstance setConfiguration:config];
    
    __weak __auto_type weakSelf = self;
    [GIDSignIn.sharedInstance signInWithPresentingViewController:self
          completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) {
      __auto_type strongSelf = weakSelf;
      if (strongSelf == nil) { return; }
    
      if (error == nil) {
        FIRAuthCredential *credential =
        [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString
                                         accessToken:result.user.accessToken.tokenString];
        // ...
      } else {
        // ...
      }
    }];
    
    
  5. Görsel senaryo taslağınıza, XIB dosyanıza GIDSignInButton ekleyin veya bunu programatik olarak örneklendirebilirsiniz. Düğmeyi resimli taslağınıza veya XIB'nize eklemek için bir Görünüm ekleyin ve özel sınıfını GIDSignInButton
  6. İsteğe bağlı: Düğmeyi özelleştirmek istiyorsanız takip etmek için:

    Swift

    1. Görünüm denetleyicinizde, oturum açma düğmesini mülk olarak tanımlayın.
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. Düğmeyi az önce yaptığınız signInButton mülküne bağlayın bildirmişti.
    3. GIDSignInButton nesnesini tanımlayın.

    Objective-C

    1. Görünüm denetleyicinizin başlık dosyasında oturum açma düğmesini
      @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
    2. Düğmeyi az önce yaptığınız signInButton mülküne bağlayın bildirmişti.
    3. GIDSignInButton nesnesini tanımlayın.

Firebase ile kimlik doğrulama

Son olarak, kimlik doğrulama kimlik bilgisi oluşturarak Firebase giriş işlemini tamamlayın. ele alacağız.

Swift

Auth.auth().signIn(with: credential) { result, error in

  // At this point, our 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;
  // ...
}];

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 içinde 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.