FirebaseUI के साथ आसानी से अपने iOS ऐप में साइन-इन जोड़ें

फायरबेसयूआई फायरबेस ऑथेंटिकेशन एसडीके के शीर्ष पर बनी एक लाइब्रेरी है जो आपके ऐप में उपयोग के लिए ड्रॉप-इन यूआई प्रवाह प्रदान करती है। FirebaseUI निम्नलिखित लाभ प्रदान करता है:

  • एकाधिक प्रदाता : ईमेल/पासवर्ड, ईमेल लिंक, फोन प्रमाणीकरण, Google साइन-इन, फेसबुक लॉगिन और ट्विटर लॉगिन के लिए साइन-इन प्रवाह।
  • खाता प्रबंधन : खाता निर्माण और पासवर्ड रीसेट जैसे खाता प्रबंधन कार्यों को संभालने के लिए प्रवाह।
  • अनाम खाता लिंकिंग : अनाम खातों को पहचान प्रदाताओं से स्वचालित रूप से लिंक करने का प्रवाह।
  • अनुकूलन योग्य : अपने ऐप से मेल खाने के लिए फायरबेसयूआई के स्वरूप को अनुकूलित करें। इसके अलावा, क्योंकि फायरबेसयूआई खुला स्रोत है, आप प्रोजेक्ट को फोर्क कर सकते हैं और इसे अपनी आवश्यकताओं के अनुसार अनुकूलित कर सकते हैं।

शुरू करने से पहले

  1. अपने Apple प्रोजेक्ट में Firebase जोड़ें

  2. अपने पॉडफ़ाइल में FirebaseUI जोड़ें:

    pod 'FirebaseUI'
    

    यदि आप चाहें, तो आप केवल प्रामाणिक घटक और वे प्रदाता जोड़ सकते हैं जिनका आप उपयोग करना चाहते हैं:

    pod 'FirebaseUI/Auth'
    
    pod 'FirebaseUI/Google'
    pod 'FirebaseUI/Facebook'
    pod 'FirebaseUI/OAuth' # Used for Sign in with Apple, Twitter, etc
    pod 'FirebaseUI/Phone'
    
  3. यदि आपने अभी तक अपने ऐप को अपने फायरबेस प्रोजेक्ट से कनेक्ट नहीं किया है, तो फायरबेस कंसोल से ऐसा करें।

साइन-इन विधियाँ सेट करें

इससे पहले कि आप उपयोगकर्ताओं को साइन इन करने के लिए फायरबेस का उपयोग कर सकें, आपको उन साइन-इन विधियों को सक्षम और कॉन्फ़िगर करना होगा जिनका आप समर्थन करना चाहते हैं।

ईमेल पता और पासवर्ड

फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें और ईमेल और पासवर्ड प्रमाणीकरण सक्षम करें।

  1. फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें। साइन इन विधि टैब पर, ईमेल/पासवर्ड प्रदाता को सक्षम करें। ध्यान दें कि ईमेल लिंक साइन-इन का उपयोग करने के लिए ईमेल या पासवर्ड साइन-इन सक्षम होना चाहिए।

  2. उसी अनुभाग में, ईमेल लिंक (पासवर्ड रहित साइन-इन) साइन-इन विधि सक्षम करें और सहेजें पर क्लिक करें।

  3. आप FIREmailLinkAuthSignInMethod के साथ FUIEmailAuth उदाहरण प्रारंभ करके ईमेल लिंक साइन इन सक्षम कर सकते हैं। आपको एक वैध FIRActionCodeSettings ऑब्जेक्ट भी प्रदान करना होगा जिसमें handleCodeInApp सही पर सेट हो।

तीव्र

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)

उद्देश्य सी

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. इसके अतिरिक्त, आपको उस यूआरएल को श्वेतसूची में डालना होगा जिसे आप इनिशियलाइज़र को पास करते हैं। आप फायरबेस कंसोल में ऐसा कर सकते हैं, प्रमाणीकरण अनुभाग खोलें। साइन इन विधि टैब पर, अधिकृत डोमेन के अंतर्गत URL जोड़ें।

  2. एक बार जब आप डीप लिंक पकड़ लेते हैं, तो आपको इसे ऑथ यूआई को पास करना होगा ताकि इसे संभाला जा सके।

तीव्र

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

उद्देश्य सी

[[FUIAuth defaultAuthUI] handleOpenURL:url sourceApplication:sourceApplication];
  1. फायरबेसयूआई-आईओएस में ईमेल लिंक साइन-इन फायरबेसयूआई-एंड्रॉइड और फायरबेसयूआई-वेब के साथ संगत है, जहां फायरबेसयूआई-एंड्रॉइड से प्रवाह शुरू करने वाला एक उपयोगकर्ता लिंक खोल सकता है और फायरबेसयूआई-वेब के साथ साइन-इन पूरा कर सकता है। विपरीत प्रवाह के लिए भी यही सत्य है।

सेब

  1. शुरू करने से पहले और फायरबेस में ऐप्पल अज्ञात डेटा आवश्यकताओं का अनुपालन करें अनुभाग का पालन करें ऐप्पल गाइड के साथ साइन इन करें

  2. अपनी एंटाइटेलमेंट फ़ाइल में Apple क्षमता से साइन इन करें जोड़ें।

  3. Apple के साथ साइन इन के लिए कॉन्फ़िगर किया गया OAuth प्रदाता इंस्टेंस प्रारंभ करें:

    तीव्र

    provider = FUIOAuth.appleAuthProvider()
    

    उद्देश्य सी

    FUIOAuth *provider = [FUIOAuth appleAuthProvider];
    

गूगल

  1. इस ट्यूटोरियल का उपयोग करके Google साइन-इन सेट करें

फेसबुक

  1. फेसबुक के आरंभिक पृष्ठ का अनुसरण करके फेसबुक लॉगिन एसडीके सेट करें।

  2. फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें और फेसबुक सक्षम करें। फेसबुक साइन-इन सक्षम करने के लिए, आपको अपनी फेसबुक ऐप आईडी और ऐप सीक्रेट प्रदान करना होगा, जिसे आप फेसबुक डेवलपर्स कंसोल में प्राप्त कर सकते हैं।

  3. प्रोजेक्ट सेटिंग्स > क्षमताओं स्क्रीन से अपने Xcode प्रोजेक्ट में किचेन शेयरिंग सक्षम करें।

  4. अपने Xcode प्रोजेक्ट में URL योजना के रूप में fb FACEBOOK_APP_ID जोड़ें।

  5. अपनी फेसबुक ऐप आईडी और डिस्प्ले नाम को Info.plist फ़ाइल में जोड़ें:

    चाबी कीमत
    FacebookAppID FACEBOOK_APP_ID (उदाहरण के लिए, 1234567890 )
    FacebookDisplayName आपके ऐप का नाम
  6. Facebook प्रदाता उदाहरण प्रारंभ करें:

    तीव्र

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

    उद्देश्य सी

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

  7. यदि आप फेसबुक लिमिटेड लॉगिन का उपयोग करना चाहते हैं, तो FUIFacebookAuth उदाहरण पर useLimitedLogin प्रॉपर्टी सेट करें।

    तीव्र

    provider.useLimitedLogin = true
    

    उद्देश्य सी

    provider.useLimitedLogin = YES;
    

ट्विटर

  1. फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें और ट्विटर सक्षम करें। ट्विटर साइन-इन सक्षम करने के लिए, आपको अपनी ट्विटर एपीआई उपभोक्ता कुंजी और रहस्य प्रदान करना होगा, जिसे आप ट्विटर एप्लिकेशन प्रबंधन कंसोल में प्राप्त कर सकते हैं।

  2. ट्विटर लॉगिन के लिए कॉन्फ़िगर किया गया OAuth प्रदाता इंस्टेंस प्रारंभ करें:

    तीव्र

    provider = FUIOAuth.twitterAuthProvider()
    

    उद्देश्य सी

    FUIOAuth *provider = [FUIOAuth twitterAuthProvider];
    

फ़ोन नंबर

  1. फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें और फ़ोन नंबर साइन-इन सक्षम करें।

  2. फायरबेस को यह सत्यापित करने में सक्षम होना चाहिए कि फ़ोन नंबर साइन-इन अनुरोध आपके ऐप से आ रहे हैं। इसे पूरा करने का एक तरीका एपीएन अधिसूचनाओं के माध्यम से है। विवरण के लिए ऐप सत्यापन सक्षम करें देखें।

    फायरबेस प्रमाणीकरण के साथ उपयोग के लिए एपीएन अधिसूचनाएं सक्षम करने के लिए:

    1. Xcode में, अपने प्रोजेक्ट के लिए पुश नोटिफिकेशन सक्षम करें

    2. अपनी APNs प्रमाणीकरण कुंजी को Firebase पर अपलोड करें। यदि आपके पास पहले से APNs प्रमाणीकरण कुंजी नहीं है, तो Apple डेवलपर सदस्य केंद्र में एक बनाना सुनिश्चित करें।

      1. फायरबेस कंसोल में अपने प्रोजेक्ट के अंदर, गियर आइकन चुनें, प्रोजेक्ट सेटिंग्स चुनें और फिर क्लाउड मैसेजिंग टैब चुनें।

      2. iOS ऐप कॉन्फ़िगरेशन के अंतर्गत APNs प्रमाणीकरण कुंजी में, अपलोड बटन पर क्लिक करें।

      3. उस स्थान पर ब्राउज़ करें जहां आपने अपनी कुंजी सहेजी थी, उसे चुनें और खोलें पर क्लिक करें। कुंजी के लिए कुंजी आईडी जोड़ें ( Apple डेवलपर सदस्य केंद्र में उपलब्ध) और अपलोड पर क्लिक करें।

      यदि आपके पास पहले से ही एपीएन प्रमाणपत्र है, तो आप इसके बजाय प्रमाणपत्र अपलोड कर सकते हैं।

  3. जब किसी डिवाइस पर APN सूचनाएं प्राप्त नहीं हो पाती हैं, तो Firebase अनुरोधों को सत्यापित करने के लिए reCAPTCHA का उपयोग करता है।

    ReCAPTCHA सत्यापन सक्षम करने के लिए, Xcode में निम्नलिखित कार्य करें:

    1. अपना प्रोजेक्ट कॉन्फ़िगरेशन खोलें: बाएं ट्री व्यू में प्रोजेक्ट नाम पर डबल-क्लिक करें। लक्ष्य अनुभाग से अपना ऐप चुनें, फिर जानकारी टैब चुनें, और यूआरएल प्रकार अनुभाग का विस्तार करें।
    2. + बटन पर क्लिक करें, और अपनी एन्कोडेड ऐप आईडी को यूआरएल योजना के रूप में जोड़ें। आप अपनी एन्कोडेड ऐप आईडी को अपने iOS ऐप के अनुभाग में, फायरबेस कंसोल के सामान्य सेटिंग्स पृष्ठ पर पा सकते हैं। अन्य फ़ील्ड खाली छोड़ दें.

      पूरा होने पर, आपकी कॉन्फ़िगरेशन निम्नलिखित के समान दिखनी चाहिए (लेकिन आपके एप्लिकेशन-विशिष्ट मानों के साथ):

      Xcode के कस्टम URL योजना सेटअप इंटरफ़ेस का स्क्रीनशॉट
  4. वैकल्पिक : फायरबेस आपके ऐप के एपीएन टोकन को स्वचालित रूप से प्राप्त करने के लिए स्विज़लिंग विधि का उपयोग करता है, फायरबेस द्वारा आपके ऐप पर भेजे जाने वाले साइलेंट पुश नोटिफिकेशन को संभालने के लिए, और सत्यापन के दौरान रीकैप्चा सत्यापन पृष्ठ से कस्टम स्कीम रीडायरेक्ट को स्वचालित रूप से इंटरसेप्ट करने के लिए।

    यदि आप स्विज़लिंग का उपयोग नहीं करना चाहते हैं, तो परिशिष्ट देखें: फ़ायरबेस एसडीके प्रमाणीकरण दस्तावेज़ों में स्विज़लिंग के बिना फ़ोन साइन-इन का उपयोग करना

दाखिल करना

FirebaseUI साइन इन फ़्लो शुरू करने के लिए, पहले FirebaseUI प्रारंभ करें:

तीव्र

import FirebaseAuthUI

/* ... */

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

उद्देश्य सी

@import FirebaseAuthUI;

...

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

फिर, उन साइन-इन विधियों का उपयोग करने के लिए FirebaseUI को कॉन्फ़िगर करें जिनका आप समर्थन करना चाहते हैं:

तीव्र

import FirebaseAuthUI
import FirebaseFacebookAuthUI
import FirebaseGoogleAuthUI
import FirebaseOAuthUI
import FirebasePhoneAuthUI

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

उद्देश्य सी

@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 या Facebook साइन-इन सक्षम किया है, तो Google और Facebook साइन-अप प्रवाह के परिणाम के लिए एक हैंडलर लागू करें:

तीव्र

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
}

उद्देश्य सी

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

अंत में, FUIAuth से AuthViewController का एक उदाहरण प्राप्त करें। फिर आप इसे या तो अपने ऐप के पहले व्यू कंट्रोलर के रूप में प्रस्तुत कर सकते हैं या इसे अपने ऐप में किसी अन्य व्यू कंट्रोलर से प्रस्तुत कर सकते हैं।

तीव्र

साइन-इन विधि चयनकर्ता प्राप्त करने के लिए:

let authViewController = authUI.authViewController()

यदि आप केवल फ़ोन नंबर साइन-इन का उपयोग करते हैं, तो आप इसके बजाय सीधे फ़ोन नंबर साइन-इन दृश्य प्रदर्शित कर सकते हैं:

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

उद्देश्य सी

साइन-इन विधि चयनकर्ता प्राप्त करने के लिए:

UINavigationController *authViewController = [authUI authViewController];

यदि आप केवल फ़ोन नंबर साइन-इन का उपयोग करते हैं, तो आप इसके बजाय सीधे फ़ोन नंबर साइन-इन दृश्य प्रदर्शित कर सकते हैं:

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

आपके द्वारा प्रमाणीकरण दृश्य प्रस्तुत करने और उपयोगकर्ता के साइन इन करने के बाद, परिणाम didSignInWithUser:error: विधि में FirebaseUI प्रामाणिक प्रतिनिधि को वापस कर दिया जाता है:

तीव्र

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

उद्देश्य सी

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

साइन आउट

FirebaseUI, Firebase प्रमाणीकरण के साथ-साथ सभी सामाजिक पहचान प्रदाताओं से साइन आउट करने के लिए सुविधाजनक तरीके प्रदान करता है:

तीव्र

authUI.signOut()

उद्देश्य सी

[authUI signOut];

अनुकूलन

आप FirebaseUI के दृश्य नियंत्रकों को उपवर्गित करके और उन्हें FUIAuth के प्रतिनिधि तरीकों में निर्दिष्ट करके साइन-इन स्क्रीन को अनुकूलित कर सकते हैं:

तीव्र

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

उद्देश्य सी

- (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];
}

आप यूआरएल को अपने ऐप की सेवा की शर्तों के अनुसार अनुकूलित कर सकते हैं, जो खाता निर्माण स्क्रीन पर लिंक है:

तीव्र

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

उद्देश्य सी

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

अंत में, आप एक कस्टम बंडल निर्दिष्ट करके अपने उपयोगकर्ताओं को दिखाए गए संदेशों और संकेतों को अनुकूलित कर सकते हैं:

तीव्र

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

उद्देश्य सी

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

अगले कदम

  • FirebaseUI के उपयोग और अनुकूलन के बारे में अधिक जानकारी के लिए, GitHub पर README फ़ाइल देखें।
  • यदि आप FirebaseUI में पाते हैं और जारी करते हैं और इसकी रिपोर्ट करना चाहते हैं, तो GitHub समस्या ट्रैकर का उपयोग करें।