FirebaseUI ile iOS uygulamanıza kolayca oturum açma ekleyin

FirebaseUI, uygulamanızda kullanım için yerleşik kullanıcı arayüzü akışları sağlayan, Firebase Authentication SDK'sının üzerine kurulu bir kitaplıktır. FirebaseUI şu avantajları sağlar:

  • Birden fazla sağlayıcı: e-posta/şifre, e-posta bağlantısı, telefon doğrulaması, Google ile Oturum Açma, Facebook Girişi ve Twitter Girişi için oturum açma akışları.
  • Hesap yönetimi: Hesap oluşturma ve şifre sıfırlama gibi hesap yönetimi görevlerini yürütmek için gereken akışlar.
  • Anonim hesap bağlama: Anonim hesapları otomatik olarak kimlik sağlayıcılara bağlamak için kullanılan akışlardır.
  • Özelleştirilebilir: FirebaseUI'nin görünümünü uygulamanıza uyacak şekilde özelleştirin. Ayrıca, FirebaseUI açık kaynak olduğundan projeyi çatallayabilir ve tam olarak ihtiyaçlarınıza göre özelleştirebilirsiniz.

Başlamadan önce

  1. Firebase'i Apple projenize ekleyin.

  2. FirebaseUI'yi Podfile dosyanıza ekleyin:

    pod 'FirebaseUI'
    

    İsterseniz yalnızca Kimlik Doğrulama bileşenini ve kullanmak istediğiniz sağlayıcıları ekleyebilirsiniz:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. Uygulamanızı henüz Firebase projenize bağlamadıysanız bunu Firebase konsolundan yapın.

Oturum açma yöntemlerini ayarlayın

Firebase'i kullanarak kullanıcıların oturumunu açabilmeniz için önce desteklemek istediğiniz oturum açma yöntemlerini etkinleştirmeniz ve yapılandırmanız gerekir.

E-posta adresi ve şifre

Firebase konsolunda Kimlik Doğrulama bölümünü açıp e-posta ve şifreyle kimlik doğrulamayı etkinleştirin.

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın. Oturum açma yöntemi sekmesinde, E-posta/Şifre sağlayıcısını etkinleştirin. E-posta bağlantısıyla oturum açmayı kullanmak için e-posta veya şifreyle oturum açma özelliğinin etkinleştirilmesi gerektiğini unutmayın.

  2. Aynı bölümde E-posta bağlantısı (şifresiz oturum açma) oturum açma yöntemini etkinleştirin ve Kaydet'i tıklayın.

  3. Bir FUIEmailAuth örneğini FIREmailLinkAuthSignInMethod ile başlatarak e-posta bağlantısıyla oturum açmayı etkinleştirebilirsiniz. Ayrıca, handleCodeInApp değerinin doğru değerine ayarlandığı geçerli bir FIRActionCodeSettings nesnesi sağlamanız gerekir.

Swift

var actionCodeSettings = ActionCodeSettings()
actionCodeSettings.url = URL(string: "https://example.appspot.com")
actionCodeSettings.handleCodeInApp = true
actionCodeSettings.setAndroidPackageName("com.firebase.example", installIfNotAvailable: false, minimumVersion: "12")

let provider = FUIEmailAuth(authUI: FUIAuth.defaultAuthUI()!,
                            signInMethod: FIREmailLinkAuthSignInMethod,
                            forceSameDevice: false,
                            allowNewEmailAccounts: true,
                            actionCodeSetting: actionCodeSettings)

Objective-C

FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
actionCodeSettings.URL = [NSURL URLWithString:@"https://example.appspot.com"];
actionCodeSettings.handleCodeInApp = YES;
[actionCodeSettings setAndroidPackageName:@"com.firebase.example"
                    installIfNotAvailable:NO
                           minimumVersion:@"12"];

id<FUIAuthProvider> provider = [[FUIEmailAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]
                                                       signInMethod:FIREmailLinkAuthSignInMethod
                                                    forceSameDevice:NO
                                              allowNewEmailAccounts:YES
                                                  actionCodeSetting:actionCodeSettings];
  1. Ayrıca, başlatıcıya ilettiğiniz URL'yi de beyaz listeye eklemeniz gerekir. Bunu yapmak için Firebase konsolunda Kimlik Doğrulama bölümünü açın. Oturum açma yöntemi sekmesinde, Yetkili alanlar altına URL'yi ekleyin.

  2. Derin bağlantıyı yakaladıktan sonra işlenebilmesi için kimlik doğrulama kullanıcı arayüzüne iletmeniz gerekir.

Swift

FUIAuth.defaultAuthUI()!.handleOpen(url, sourceApplication: sourceApplication)

Objective-C

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. FirebaseUI-iOS'teki e-posta bağlantısıyla oturum açma özelliği, FirebaseUI-Android ve FirebaseUI-web ile uyumludur. Bu sürümde, FirebaseUI-Android'den akışı başlatan bir kullanıcı bağlantıyı açıp FirebaseUI-web ile oturum açma işlemini tamamlayabilir. Aynısı, karşıt akış için de geçerlidir.

Apple

  1. Firebase Apple ile oturum açma kılavuzundaki Başlamadan önce ve Apple anonimleştirilmiş veri şartlarına uyma bölümlerini uygulayın.

  2. Yararlanma hakları dosyanıza Apple ile oturum açma özelliğini ekleyin.

  3. Apple ile oturum açma özelliği için yapılandırılmış bir OAuth sağlayıcı örneğini başlatın:

    Swift

    provider = FUIOAuth.appleAuthProvider()
    

    Objective-C

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

Google

  1. Bu eğiticiyi kullanarak Google ile Oturum Açma özelliğini ayarlama

Facebook

  1. Facebook'un başlangıç sayfasını takip ederek Facebook Giriş SDK'sını ayarlayın.

  2. Firebase konsolunda Kimlik Doğrulama bölümünü açın ve Facebook'u etkinleştirin. Facebook ile oturum açmayı etkinleştirmek için Facebook Uygulama Kimliğinizi ve Facebook Geliştirici Konsolu'ndan bulabileceğiniz Uygulama Gizli Anahtarınızı sağlamanız gerekir.

  3. Proje Ayarları > Özellikler ekranından Xcode projenizdeki anahtar zinciri paylaşımını etkinleştirin.

  4. fbFACEBOOK_APP_ID öğesini Xcode projenize URL şeması olarak ekleyin.

  5. Facebook uygulaması kimliğinizi ve görünen adınızı Info.plist dosyasına ekleyin:

    Anahtar Değer
    FacebookUygulama Kimliği FACEBOOK_APP_ID (örneğin, 1234567890)
    FacebookGörüntü Adı Uygulamanızın adı
  6. Facebook sağlayıcı örneğini başlatın:

    Swift

    provider = FUIFacebookAuth(authUI: FUIAuth.defaultAuthUI())
    

    Objective-C

    FUIFacebookAuth *provider = [[FUIFacebookAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]];
    

  7. Facebook Sınırlı Giriş kullanmak istiyorsanız FUIFacebookAuth örneğinde useLimitedLogin özelliğini ayarlayın.

    Swift

    provider.useLimitedLogin = true
    

    Objective-C

    provider.useLimitedLogin = YES;
    

Twitter

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın ve Twitter'ı etkinleştirin. Twitter ile oturum açmayı etkinleştirmek için Twitter API'si tüketici anahtarınızı ve sırrınızı sağlamanız gerekir. Bu anahtara Twitter Uygulama Yönetimi konsolundan ulaşabilirsiniz.

  2. Twitter girişi için yapılandırılmış bir OAuth sağlayıcı örneğini başlatın:

    Swift

    provider = FUIOAuth.twitterAuthProvider()
    

    Objective-C

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

Telefon numarası

  1. Firebase konsolunda Kimlik Doğrulama bölümünü açın ve telefon numarasıyla oturum açmayı etkinleştirin.

  2. Firebase, telefon numarası oturum açma isteklerinin uygulamanızdan geldiğini doğrulayabilmelidir. Bunu yapmanın yollarından biri APNs bildirimleridir. Ayrıntılar için Uygulama doğrulamayı etkinleştirme bölümüne bakın.

    Firebase Authentication ile kullanmak üzere APNs bildirimlerini etkinleştirmek için:

    1. Xcode'da projeniz için push bildirimlerini etkinleştirin.

    2. APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin. Halihazırda bir APNs kimlik doğrulama anahtarınız yoksa Apple Developer Member Center'da bir tane oluşturduğunuzdan emin olun.

      1. Firebase konsolunda projenizin içinde, dişli simgesini, Proje Ayarları'nı ve ardından Cloud Messaging sekmesini seçin.

      2. iOS uygulaması yapılandırması bölümündeki APN kimlik doğrulama anahtarı'nda Yükle düğmesini tıklayın.

      3. Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve 'ı tıklayın. Anahtarın anahtar kimliğini ekleyin ( Apple Geliştirici Üye Merkezi'nde mevcuttur) ve Yükle'yi tıklayın.

      Zaten bir APNs sertifikanız varsa bunun yerine sertifikayı yükleyebilirsiniz.

  3. Bir cihazda APNs bildirimleri alınamadığında Firebase, istekleri doğrulamak için reCAPTCHA'yı kullanır.

    reCAPTCHA doğrulamasını etkinleştirmek için Xcode'da aşağıdakileri yapın:

    1. Proje yapılandırmanızı açın: Sol ağaç görünümünde proje adını çift 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 Kodlanmış Uygulama Kimliğinizi URL şeması olarak ekleyin. Kodlanmış Uygulama Kimliğinizi, Firebase konsolunun Genel Ayarlar sayfasının iOS uygulamanızın bölümünde bulabilirsiniz. Diğer alanları boş bırakın.

      Tamamlandığında yapılandırmanız aşağıdakine benzer bir görünümde olacaktır (ancak uygulamaya özel değerlerinizle):

      Xcode&#39;un özel URL şeması kurulum arayüzünün ekran görüntüsü
  4. İsteğe bağlı: Firebase, uygulamanızın APNs jetonunu otomatik olarak almak, uygulamanıza gönderdiği sessiz push bildirimlerini yönetmek ve doğrulama sırasında reCAPTCHA doğrulama sayfasından özel şema yönlendirmesini otomatik olarak engellemek için kaydırma yöntemini kullanır.

    Kaydırma özelliğini kullanmamayı tercih ederseniz Firebase SDK'sı kimlik doğrulama belgelerindeki Ek: Telefonda oturum açma işlemini hızlandırmadan kullanma bölümünü inceleyin.

Oturum aç

FirebaseUI oturum açma akışını başlatmak için önce FirebaseUI'yi başlatın:

Swift

import FirebaseAuthUI

/* ... */

FirebaseApp.configure()
let authUI = FUIAuth.defaultAuthUI()
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self

Objective-C

@import FirebaseAuthUI;

...

[FIRApp configure];
FUIAuth *authUI = [FUIAuth defaultAuthUI];
// You need to adopt a FUIAuthDelegate protocol to receive callback
authUI.delegate = self;

Ardından, FirebaseUI'yi desteklemek istediğiniz oturum açma yöntemlerini kullanacak şekilde yapılandırın:

Swift

import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI

let providers: [FUIAuthProvider] = [
  FUIGoogleAuth(),
  FUIFacebookAuth(),
  FUITwitterAuth(),
  FUIPhoneAuth(authUI:FUIAuth.defaultAuthUI()),
]
self.authUI.providers = providers

Objective-C

@import FirebaseAuthUI;
@import FirebaseFacebookAuthUI;
@import FirebaseGoogleAuthUI;
@import FirebaseOAuthUI;
@import FirebasePhoneAuthUI;

...

NSArray<id<FUIAuthProvider>> *providers = @[
  [[FUIGoogleAuth alloc] init],
  [[FUIFacebookAuth alloc] init],
  [[FUITwitterAuth alloc] init],
  [[FUIPhoneAuth alloc] initWithAuthUI:[FUIAuth defaultAuthUI]]
];
_authUI.providers = providers;

Google veya Facebook ile oturum açmayı etkinleştirdiyseniz Google ve Facebook kayıt akışlarının sonucu için bir işleyici uygulayın:

Swift

func application(_ app: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?
  if FUIAuth.defaultAuthUI()?.handleOpen(url, sourceApplication: sourceApplication) ?? false {
    return true
  }
  // other URL handling goes here.
  return false
}

Objective-C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
  NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey];
  return [[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
}

Son olarak, FUIAuth üzerinden AuthViewController öğesinin bir örneğini alın. Ardından bunu uygulamanızın ilk görüntüleme denetleyicisi olarak veya uygulamanızdaki başka bir görünüm denetleyicisinden sunabilirsiniz.

Swift

Oturum açma yöntemi seçiciyi almak için:

let authViewController = authUI.authViewController()

Yalnızca telefon numarasıyla oturum açma özelliğini kullanıyorsanız bunun yerine doğrudan telefon numarası oturum açma görünümünü görüntüleyebilirsiniz:

let phoneProvider = FUIAuth.defaultAuthUI().providers.first as! FUIPhoneAuth
phoneProvider.signIn(withPresenting: currentlyVisibleController, phoneNumber: nil)

Objective-C

Oturum açma yöntemi seçiciyi almak için:

UINavigationController *authViewController = [authUI authViewController];

Yalnızca telefon numarasıyla oturum açma özelliğini kullanıyorsanız bunun yerine doğrudan telefon numarası oturum açma görünümünü görüntüleyebilirsiniz:

FUIPhoneAuth *phoneProvider = [FUIAuth defaultAuthUI].providers.firstObject;
[phoneProvider signInWithPresentingViewController:currentlyVisibleController phoneNumber:nil];

Kimlik doğrulama görünümü gösterildikten ve kullanıcı oturum açtıktan sonra sonuç, didSignInWithUser:error: yönteminde FirebaseUI Auth temsilcisine döndürülür:

Swift

func authUI(_ authUI: FUIAuth, didSignInWith user: FIRUser?, error: Error?) {
  // handle user and error as necessary
}

Objective-C

   - (void)authUI:(FUIAuth *)authUI
didSignInWithUser:(nullable FIRUser *)user
            error:(nullable NSError *)error {
  // Implement this method to handle signed in user or error if any.
}

Oturumu Kapat

FirebaseUI, tüm sosyal kimlik sağlayıcıların yanı sıra Firebase Authentication'ı kapatmak için pratik yöntemler sunar:

Swift

authUI.signOut()

Objective-C

[authUI signOut];

Özelleştirme

FirebaseUI'nin görüntüleme denetleyicilerini alt sınıflandırıp FUIAuth yetki verme yöntemlerinde belirterek oturum açma ekranlarını özelleştirebilirsiniz:

Swift

func authPickerViewController(forAuthUI authUI: FUIAuth) -> FUIAuthPickerViewController {
  return FUICustomAuthPickerViewController(nibName: "FUICustomAuthPickerViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func emailEntryViewController(forAuthUI authUI: FUIAuth) -> FUIEmailEntryViewController {
  return FUICustomEmailEntryViewController(nibName: "FUICustomEmailEntryViewController",
                                           bundle: Bundle.main,
                                           authUI: authUI)
}

func passwordRecoveryViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordRecoveryViewController {
  return FUICustomPasswordRecoveryViewController(nibName: "FUICustomPasswordRecoveryViewController",
                                                 bundle: Bundle.main,
                                                 authUI: authUI,
                                                 email: email)
}

func passwordSignInViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignInViewController {
  return FUICustomPasswordSignInViewController(nibName: "FUICustomPasswordSignInViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordSignUpViewController(forAuthUI authUI: FUIAuth, email: String) -> FUIPasswordSignUpViewController {
  return FUICustomPasswordSignUpViewController(nibName: "FUICustomPasswordSignUpViewController",
                                               bundle: Bundle.main,
                                               authUI: authUI,
                                               email: email)
}

func passwordVerificationViewController(forAuthUI authUI: FUIAuth, email: String, newCredential: AuthCredential) -> FUIPasswordVerificationViewController {
  return FUICustomPasswordVerificationViewController(nibName: "FUICustomPasswordVerificationViewController",
                                                     bundle: Bundle.main,
                                                     authUI: authUI,
                                                     email: email,
                                                     newCredential: newCredential)
}

Objective-C

- (FUIAuthPickerViewController *)authPickerViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomAuthPickerViewController alloc] initWithNibName:@"FUICustomAuthPickerViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];
}

- (FUIEmailEntryViewController *)emailEntryViewControllerForAuthUI:(FUIAuth *)authUI {
  return [[FUICustomEmailEntryViewController alloc] initWithNibName:@"FUICustomEmailEntryViewController"
                                                             bundle:[NSBundle mainBundle]
                                                             authUI:authUI];

}

- (FUIPasswordSignInViewController *)passwordSignInViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignInViewController alloc] initWithNibName:@"FUICustomPasswordSignInViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordSignUpViewController *)passwordSignUpViewControllerForAuthUI:(FUIAuth *)authUI
                                                                     email:(NSString *)email {
  return [[FUICustomPasswordSignUpViewController alloc] initWithNibName:@"FUICustomPasswordSignUpViewController"
                                                                 bundle:[NSBundle mainBundle]
                                                                 authUI:authUI
                                                                  email:email];

}

- (FUIPasswordRecoveryViewController *)passwordRecoveryViewControllerForAuthUI:(FUIAuth *)authUI
                                                                         email:(NSString *)email {
  return [[FUICustomPasswordRecoveryViewController alloc] initWithNibName:@"FUICustomPasswordRecoveryViewController"
                                                                   bundle:[NSBundle mainBundle]
                                                                   authUI:authUI
                                                                    email:email];

}

- (FUIPasswordVerificationViewController *)passwordVerificationViewControllerForAuthUI:(FUIAuth *)authUI
                                                                                 email:(NSString *)email
                                                                         newCredential:(FIRAuthCredential *)newCredential {
  return [[FUICustomPasswordVerificationViewController alloc] initWithNibName:@"FUICustomPasswordVerificationViewController"
                                                                       bundle:[NSBundle mainBundle]
                                                                       authUI:authUI
                                                                        email:email
                                                                newCredential:newCredential];
}

URL'yi, uygulamanızın hesap oluşturma ekranında bağlantısı verilen hizmet şartlarına göre özelleştirebilirsiniz:

Swift

let kFirebaseTermsOfService = URL(string: "https://example.com/terms")!
authUI.tosurl = kFirebaseTermsOfService

Objective-C

authUI.TOSURL = [NSURL URLWithString:@"https://example.com/terms"];

Son olarak, özel bir paket belirterek kullanıcılarınıza gösterilen mesajları ve istemleri özelleştirebilirsiniz:

Swift

authUI.customStringsBundle = NSBundle.mainBundle() // Or any custom bundle.

Objective-C

authUI.customStringsBundle = [NSBundle mainBundle]; // Or any custom bundle.

Sonraki adımlar

  • FirebaseUI'yi kullanma ve özelleştirme hakkında daha fazla bilgi için GitHub'daki BENİOKU dosyasına göz atın.
  • FirebaseUI'de bulup sorun yaşarsanız ve bildirmek isterseniz GitHub sorun izleyici'yi kullanın.