Google ile Oturum Açma'yı uygulamanıza entegre ederek kullanıcılarınızın Google Hesaplarını kullanarak Firebase ile kimlik doğrulaması yapmalarına olanak tanıyabilirsiniz.
Sen başlamadan önce
Firebase bağımlılıklarını yüklemek ve yönetmek için Swift Paket Yöneticisini kullanın.
- Xcode'da uygulama projeniz açıkken Dosya > Paket Ekle'ye gidin.
- İstendiğinde Firebase Apple platformları SDK deposunu ekleyin:
- Firebase Kimlik Doğrulama kitaplığını seçin.
-
-ObjC
bayrağını hedefinizin derleme ayarlarının Diğer Bağlayıcı Bayrakları bölümüne ekleyin. - Bitirdiğinizde Xcode, bağımlılıklarınızı arka planda otomatik olarak çözmeye ve indirmeye başlayacaktır.
https://github.com/firebase/firebase-ios-sdk.git
Google Oturum Açma SDK'sını projenize ekleyin
Xcode'da uygulama projeniz açıkken Dosya > Paket Ekle'ye gidin.
İstendiğinde Google Oturum Açma SDK deposunu ekleyin:
https://github.com/google/GoogleSignIn-iOS
Bitirdiğinizde Xcode, bağımlılıklarınızı arka planda otomatik olarak çözmeye ve indirmeye başlayacaktır.
Firebase projeniz için Google ile Oturum Açmayı etkinleştirin
Kullanıcıların Google ile Oturum Açma'yı kullanarak oturum açmasına izin vermek için öncelikle 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ı indirin ve bunu Xcode projenize kopyalayın. Yenisini mevcut sürümlerin üzerine yazın. (Bkz . iOS projenize Firebase ekleme .)
Gerekli başlık dosyalarını içe aktarın
Öncelikle Firebase SDK'sını ve Google Oturum Açma SDK'sı 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 ile Oturum Açmayı Uygulayın
Bu adımları izleyerek Google Oturum Açma'yı uygulayın. iOS ile Google Oturum Açma özelliğini kullanmayla ilgili ayrıntılar için Google Oturum Açma geliştirici belgelerine bakın.
- Xcode projenize özel URL şemaları ekleyin:
- Proje konfigürasyonunuzu 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.
- + düğmesini tıklayın ve tersine çevrilen istemci kimliğiniz için bir URL şeması ekleyin. Bu değeri bulmak için
yapılandırma dosyasını açın veGoogleService-Info.plist 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 alanlara dokunmadan bırakın.Tamamlandığında, yapılandırmanız aşağıdakine benzer bir şekilde görünmelidir (ancak uygulamaya özel değerlerinizle):
- Uygulama temsilcinizin
application:didFinishLaunchingWithOptions:
yöntemindeFirebaseApp
nesnesini yapılandırın.Süratli
FirebaseApp.configure()
Amaç-C
// Use Firebase library to configure APIs [FIRApp configure];
- Uygulama temsilcinizin
application:openURL:options:
yöntemini uygulayın. YöntemGIDSignIn
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]; }
- Uygulamanızın sunum görünümü denetleyicisini ve istemci kimliğini Google Oturum Açma sağlayıcısının
signIn
yöntemine iletin ve elde edilen Google kimlik doğrulama jetonundan 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 { // ... } }];
- Film şeridinize veya XIB dosyanıza bir
GIDSignInButton
ekleyin veya bunu program aracılığıyla başlatın. Düğmeyi storyboard'unuza veya XIB dosyanıza eklemek için bir View 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:
Süratli
- Görünüm denetleyicinizde oturum açma düğmesini bir özellik olarak bildirin.
@IBOutlet weak var signInButton: GIDSignInButton!
- Düğmeyi az önce bildirdiğiniz
signInButton
özelliğine bağlayın. - GIDSignInButton nesnesinin özelliklerini ayarlayarak düğmeyi özelleştirin.
Amaç-C
- 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;
- Düğmeyi az önce bildirdiğiniz
signInButton
özelliğine bağlayın. - GIDSignInButton nesnesinin özelliklerini ayarlayarak düğmeyi özelleştirin.
- Görünüm denetleyicinizde oturum açma düğmesini bir özellik olarak bildirin.
Firebase ile kimlik doğrulama
Son olarak, önceki adımda oluşturulan kimlik doğrulama bilgileriyle 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 oturum açan kullanıcının kimlik bilgileriyle (yani kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) ilişkilendirilir. 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 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önetme .Firebase Gerçek Zamanlı Veritabanı ve Bulut Depolama Güvenliği Kurallarınızda , oturum açan kullanıcının benzersiz kullanıcı kimliğini
auth
değişkeninden alabilir ve bunu, kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.
Bir kullanıcının oturumunu kapatmak için signOut:
öğesini çağırın.
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; }
Kimlik doğrulama hatalarının tamamı için hata işleme kodunu da eklemek isteyebilirsiniz. Bkz. Hataları İşleme .