Apple Platformlarında Google ile Oturum Açmayı Kullanarak Kimlik Doğrulama

Google Sign-In'i uygulamanıza entegre ederek, kullanıcılarınızın Google Hesaplarını kullanarak Firebase ile kimlik doğrulaması yapmasına izin verebilirsiniz.

Sen başlamadan önce

Firebase bağımlılıklarını kurmak ve yönetmek için Swift Paket Yöneticisi'ni kullanın.

  1. Xcode'da, uygulama projeniz açıkken File > Add Packages seçeneğine gidin.
  2. İstendiğinde, Firebase Apple platformları SDK deposunu ekleyin:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Firebase Kimlik Doğrulaması kitaplığını seçin.
  5. Bittiğinde, Xcode otomatik olarak arka planda bağımlılıklarınızı çözmeye ve indirmeye başlayacaktır.

Google Sign-In SDK'sını projenize ekleyin

  1. Xcode'da, uygulama projeniz açıkken File > Add Packages seçeneğine gidin.

  2. İstendiğinde, Google Sign-In SDK deposunu ekleyin:

    https://github.com/google/GoogleSignIn-iOS
    
  3. Bittiğinde, Xcode otomatik olarak arka planda bağımlılıklarınızı çözmeye ve indirmeye başlayacaktır.

Firebase projeniz için Google ile Oturum Açmayı etkinleştirin

Kullanıcıların Google Sign-In kullanarak oturum açmasına izin vermek için önce Firebase projeniz için Google Sign-In sağlayıcısını etkinleştirmeniz gerekir:

  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 yenisini yazın. (Bkz . Firebase'i iOS projenize ekleme .)

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

İlk olarak, Firebase SDK'sını ve Google Sign-In SDK başlık dosyalarını uygulamanıza aktarmanız gerekir.

Süratli

import FirebaseCore
import FirebaseAuth
import GoogleSignIn

Amaç-C

@import FirebaseCore;
@import GoogleSignIn;

Google Sign-In'i uygulayın

Bu adımları izleyerek Google Sign-In'i uygulayın. iOS ile Google Sign-In kullanımına ilişkin ayrıntılar için Google Sign-In geliştirici belgelerine bakın.

  1. Xcode projenize özel URL şemaları ekleyin:
    1. Proje yapılandırmanızı açın: sol ağaç görünümünde proje adına tıklayın. 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 tersine çevrilmiş müşteri kimliğiniz için bir URL şeması ekleyin. Bu değeri bulmak için GoogleService-Info.plist yapılandırma dosyasını açın ve REVERSED_CLIENT_ID anahtarını arayın. Bu anahtarın değerini kopyalayın ve yapılandırma sayfasındaki URL Şemaları kutusuna yapıştırın. Diğer alanları olduğu gibi bırakın.

      Tamamlandığında, yapılandırmanız aşağıdakine benzer görünmelidir (ancak uygulamanıza özel değerlerle):

  2. Uygulama temsilcinizin application:didFinishLaunchingWithOptions: yönteminde FirebaseApp nesnesini yapılandırın.

    Süratli

    FirebaseApp.configure()
    

    Amaç-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. Uygulama temsilcinizin application:openURL:options: yöntemini uygulayın. Yöntem, kimlik doğrulama işleminin sonunda uygulamanızın aldığı URL'yi düzgün bir şekilde işleyecek olan GIDSignIn örneğinin handleURL yöntemini çağırmalıdır.

    Süratli

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

    Amaç-C

    - (BOOL)application:(nonnull UIApplication *)application
                openURL:(nonnull NSURL *)url
                options:(nonnull NSDictionary<NSString *, id> *)options {
      return [[GIDSignIn sharedInstance] handleURL:url];
    }
    
  4. Uygulamanız için sunum yapan görünüm denetleyicisini ve istemci kimliğini Google Oturum Açma sağlayıcısının signIn yöntemine iletin ve sonuçta ortaya çıkan Google kimlik doğrulama belirtecinden bir Firebase Kimlik Doğrulaması kimlik bilgisi oluşturun:

    Süratli

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

    Amaç-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. Film şeridinize, XIB dosyanıza bir GIDSignInButton ekleyin veya programlı olarak örneğini oluşturun. Düğmeyi film şeridinize veya XIB dosyanıza eklemek için bir Görünüm ekleyin ve özel sınıfını GIDSignInButton olarak ayarlayın.
  6. İsteğe bağlı : Düğmeyi özelleştirmek istiyorsanız aşağıdakileri yapın:

    Süratli

    1. Görünüm denetleyicinizde, oturum açma düğmesini bir özellik olarak bildirin.
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. Düğmeyi az önce bildirdiğiniz signInButton özelliğine bağlayın.
    3. GIDSignInButton nesnesinin özelliklerini ayarlayarak düğmeyi özelleştirin.

    Amaç-C

    1. Görünüm denetleyicinizin başlık dosyasında, oturum açma düğmesini bir özellik olarak bildirin.
      @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
    2. Düğmeyi az önce bildirdiğiniz signInButton özelliğine bağlayın.
    3. GIDSignInButton nesnesinin özelliklerini ayarlayarak düğmeyi özelleştirin.

Firebase ile kimlik doğrulaması yapın

Son olarak, bir önceki adımda oluşturulan auth kimlik bilgisi ile Firebase oturum açma işlemini tamamlayın.

Süratli

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

  // At this point, our user is signed in
}
    

Amaç-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

Bir kullanıcı ilk kez oturum açtıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açtığı kimlik bilgilerine (yani, kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak saklanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda, kullanıcının temel profil bilgilerini User nesnesinden alabilirsiniz. Bkz . Kullanıcıları Yönetin .

  • Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama Güvenlik Kurallarınızda , oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve bunu, bir kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.

Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak, kullanıcıların birden fazla kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz.

Bir kullanıcının oturumunu kapatmak için oturumu kapatın signOut: .

Süratli

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

Amaç-C

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Tüm kimlik doğrulama hataları için hata işleme kodu da eklemek isteyebilirsiniz. Bkz. İşleme Hataları .