Google ile oturum açma özelliğini uygulamanıza entegre ederek kullanıcılarınızın Google Hesaplarını kullanarak Firebase ile kimlik doğrulamasına izin verebilirsiniz.
Başlamadan önce
Firebase bağımlılarını yüklemek ve yönetmek için Swift Package Manager'ı kullanın.
Firebase SDK'larını Apple projenize eklemenin farklı yolları (ör. doğrudan çerçeveleri içe aktarma ve CocoaPods kullanma) hakkında bilgi edinmek için- Xcode'da, uygulamanız açıkken Dosya > Paket Ekle'ye gidin.
- İstendiğinde Firebase Apple platformları SDK deposunu ekleyin:
- Firebase Authentication kitaplığını seçin.
-ObjC
işaretini, hedefinizin derleme ayarlarının Diğer Bağlantı Oluşturucu İşaretleri bölümüne ekleyin.- İşlem tamamlandığında Xcode, arka planda bağımlılarınızı otomatik olarak çözümlemeye ve indirmeye başlar.
https://github.com/firebase/firebase-ios-sdk.git
Google Sign-In SDK'sını projenize ekleme
Xcode'da, uygulamanız açıkken Dosya > Paket Ekle'ye gidin.
İstendiğinde Google Sign-In SDK deposunu ekleyin:
https://github.com/google/GoogleSignIn-iOS
İşlem tamamlandığında Xcode, arka planda bağımlılarınızı otomatik olarak çözümlemeye ve indirmeye baş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 kullanmasına izin vermek için önce Firebase projeniz için Google ile oturum açma sağlayıcısını etkinleştirmeniz gerekir:
- Firebase konsolunda Kimlik Doğrulama bölümünü açın.
- Oturum açma yöntemi sekmesinde Google sağlayıcısını etkinleştirin.
Kaydet'i tıklayın.
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ılır. (Firebase'i iOS projenize ekleme bölümüne bakın.)
Gerekli başlık dosyalarını içe aktarma
Öncelikle Firebase SDK'sını ve Google Sign-In SDK başlık dosyalarını uygulamanıza içe aktarmanız gerekir.
import FirebaseCore import FirebaseAuth import GoogleSignIn
@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. iOS ile Google ile oturum açma özelliğini kullanmayla ilgili ayrıntılar için Google ile oturum açma geliştirici belgelerine bakın.
- Xcode projenize özel URL şemaları ekleyin:
- Proje yapılandırmanızı açın: Soldaki 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.
- + düğmesini tıklayın ve tersine çevrilmiş istemci kimliğiniz için bir URL şeması ekleyin. Bu değeri bulmak için
yapılandırma dosyasını açıpGoogleService-Info.plist REVERSED_CLIENT_ID
anahtarını arayın. Bu anahtarın değerini kopyalayıp yapılandırma sayfasındaki URL Şemaları kutusuna yapıştırın. Diğer alanları değiştirmeden bırakın.Yapılandırmanız tamamlandığında aşağıdakine benzer bir görünüme sahip olmalıdır (ancak uygulamaya özgü değerlerinizle):
- Uygulama temsilcinizin
application:didFinishLaunchingWithOptions:
yöntmesindeFirebaseApp
nesnesini yapılandırın.FirebaseApp.configure()
// Use Firebase library to configure APIs [FIRApp configure];
- Uygulama temsilcinizin
application:openURL:options:
yöntemini uygulayın. Yöntem,GIDSignIn
örneğininhandleURL
yöntemini çağırmalıdır. Bu yöntem, kimlik doğrulama sürecinin sonunda uygulamanızın aldığı URL'yi uygun şekilde işler.func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { return GIDSignIn.sharedInstance.handle(url) }
- (BOOL)application:(nonnull UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<NSString *, id> *)options { return [[GIDSignIn sharedInstance] handleURL:url]; }
- Uygulamanızın sunan görünüm denetleyicisini ve istemci kimliğini Google oturum açma sağlayıcının
signIn
yöntemine iletin ve elde edilen Google kimlik doğrulama jetonundan bir Firebase Authentication kimlik bilgisi oluşturun: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) // ... }
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 { // ... } }];
- Taslak planınıza veya XIB dosyanıza bir
GIDSignInButton
ekleyin ya da bunu programatik olarak örneklendirin. Düğmeyi taslağınıza veya XIB dosyanıza eklemek için bir Görünüm ekleyin ve özel sınıfınıGIDSignInButton
olarak ayarlayın. - İsteğe bağlı: Düğmeyi özelleştirmek istiyorsanız aşağıdakileri yapın:
- Görüntüleme denetleyicinizde oturum açma düğmesini mülk olarak tanımlayın.
@IBOutlet weak var signInButton: GIDSignInButton!
- Düğmeyi, az önce tanımladığınız
signInButton
mülküne bağlayın. - GIDSignInButton nesnesinin özelliklerini ayarlayarak düğmeyi özelleştirin.
- Görüntüleme denetleyicinizin üstbilgi dosyasında oturum açma düğmesini bir özellik olarak tanımlayın.
@property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
- Düğmeyi, az önce tanımladığınız
signInButton
mülküne bağlayın. - GIDSignInButton nesnesinin özelliklerini ayarlayarak düğmeyi özelleştirin.
- Görüntüleme denetleyicinizde oturum açma düğmesini mülk olarak tanımlayın.
Firebase ile kimlik doğrulama
Son olarak, önceki adımda oluşturulan kimlik bilgisini kullanarak Firebase giriş işlemini tamamlayın.
Auth.auth().signIn(with: credential) { result, error in // At this point, our user is signed in }
[[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ıktan sonra yeni bir kullanıcı hesabı oluşturulur ve kullanıcının oturum açarken kullandığı kimlik bilgilerine (yani 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ığından bağımsız olarak 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.
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Ayrıca, kimlik doğrulama hatalarının tamamı için hata işleme kodu da ekleyebilirsiniz. Hataları işleme bölümüne bakın.