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

Google ile oturum açma özelliğini uygulamanıza entegre ederek kullanıcılarınızın Google Hesaplarını kullanarak Firebase'de kimlik doğrulamasına izin verebilirsiniz.

Yapay zeka yardımı için aşağıdaki istemi yapay zeka destekli kodlama aracınıza (ör. Antigravity, Claude Code, Codex ve Cursor) kopyalayın. İstemi özelleştirebilir ve temsilcinizle birlikte yineleme yapabilirsiniz. Ayrıntılı yükleme bilgileri için Firebase aracı becerileri sayfasını ziyaret edin.

Help me use Firebase in my app.
1. Make sure that **Firebase agent skills** are installed and updated. For Claude Code, Codex, or Cursor agents, help me install the Firebase plugin. For other agents, run `npx skills add firebase/agent-skills`. Always try to use **Firebase agent skills** for Firebase-related tasks.
2. Help me set up and use Firebase Authentication with Google Sign-In in my app.

Başlamadan önce

Firebase bağımlılıklarını yüklemek ve yönetmek için Swift Package Manager'ı kullanın.

  1. Xcode'da, uygulama projeniz açıkken File > Add Packages'a (Dosya > Paket Ekle) gidin.
  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ının Other Linker Flags (Diğer Bağlayıcı İşaretleri) bölümüne ekleyin.
  6. İşlem tamamlandığında Xcode, bağımlılıklarınızı otomatik olarak çözümlemeye ve arka planda indirmeye başlar.

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

  1. Xcode'da, uygulama projeniz açıkken File > Add Packages'a (Dosya > Paket Ekle) gidin.

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

    https://github.com/google/GoogleSignIn-iOS
    
  3. İşlem tamamlandığında Xcode, bağımlılıklarınızı arka planda otomatik olarak çözmeye ve indirmeye başlar.

Firebase projeniz için Google ile oturum açmayı etkinleştirme

Kullanıcıların Google ile Oturum Açma'yı kullanarak oturum açmasına izin vermek için öncelikle Firebase projenizde Google ile Oturum Açma sağlayıcısını etkinleştirmeniz gerekir:

  1. Firebase konsolunda Güvenlik > Kimlik doğrulama'ya gidin.

  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ı indirip Xcode projenize kopyalayın. Mevcut sürümlerin üzerine yeni sürümü yazın. (Bkz. Firebase'i iOS projenize ekleme.)

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

Öncelikle Firebase SDK ve Google ile Oturum Açma SDK üstbilgi dosyalarını uygulamanıza aktarmanız gerekir.

Swift

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'yı uygulayın. Google ile oturum açma özelliğini iOS'te kullanmayla ilgili ayrıntılar için Google ile oturum açma 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ını 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ş istemci 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ı bulun. Bu anahtarın değerini kopyalayıp yapılandırma sayfasındaki URL Şemaları kutusuna yapıştırın. Diğer alanları değiştirmeyin.

      İşlem tamamlandığında yapılandırmanız aşağıdaki gibi görünmelidir (ancak uygulamaya özel değerlerinizle):

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

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

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

    Swift

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
      // ...
    }
      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 için sunum yapan görünüm denetleyicisini ve istemci kimliğini Google ile oturum açma sağlayıcısının signIn yöntemine iletin ve sonuçta elde edilen Google kimlik doğrulama jetonundan bir Firebase Authentication kimlik bilgisi oluşturun:

    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: viewController) { result, error in
      guard error == nil else {
        // ...
        return
      }
    
      guard let user = result?.user,
            let idToken = user.idToken?.tokenString
      else {
        // ...
        return
      }
    
      let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                     accessToken: user.accessToken.tokenString)
      self.signIn(with: credential)
    }

    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. Öykü panonuza, XIB dosyanıza GIDSignInButton ekleyin veya bunu programatik olarak oluşturun. Düğmeyi storyboard'unuza 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:

    Swift

    1. Görünüm denetleyicinizde oturum açma düğmesini özellik olarak tanımlayın.
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. Düğmeyi, yeni bildirdiğiniz signInButton mülküne bağlayın.
    3. GIDSignInButton nesnesinin özelliklerini ayarlayarak düğmeyi özelleştirin.

    Objective-C

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

Firebase ile kimlik doğrulama

Son olarak, önceki adımda oluşturulan kimlik doğrulama kimlik bilgisiyle Firebase giriş sürecini tamamlayın.

Swift

Auth.auth().signIn(with: credential) { result, error in
  guard error == nil else {
    // ...
    return
  }

  // 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

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 (kullanıcı adı ve şifre, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda, kullanıcının temel profil bilgilerini User nesnesinden alabilirsiniz. Kullanıcıları yönetme başlıklı makaleyi inceleyin.

  • Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda, oturum açmış kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve 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 uygulamanızda birden fazla kimlik doğrulama sağlayıcı kullanarak oturum açmasına izin verebilirsiniz.

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

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 hataları için hata işleme kodu eklemek de isteyebilirsiniz. Hataları işleme başlıklı makaleyi inceleyin.