Apple प्लैटफ़ॉर्म पर 'Google साइन इन' का इस्तेमाल करके पुष्टि करें

आप अपने ऐप्लिकेशन में 'Google साइन-इन' को इंटिग्रेट करके, उपयोगकर्ताओं को उनके Google खाते का इस्तेमाल करके Firebase से पुष्टि करने की अनुमति दे सकते हैं.

वेब कंटेनर इंस्टॉल करने से पहले

Firebase डिपेंडेंसी इंस्टॉल और मैनेज करने के लिए, Swift पैकेज मैनेजर का इस्तेमाल करें.

  1. Xcode में, अपना ऐप्लिकेशन प्रोजेक्ट खोलने के लिए, फ़ाइल > पैकेज जोड़ें पर जाएं.
  2. जब कहा जाए, तब Firebase Apple प्लैटफ़ॉर्म SDK टूल का रिपॉज़िटरी जोड़ें:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Firebase से पुष्टि करने की लाइब्रेरी चुनें.
  5. अपने टारगेट की बिल्ड सेटिंग के अन्य लिंकर फ़्लैग सेक्शन में -ObjC फ़्लैग जोड़ें.
  6. यह काम पूरा होने के बाद, Xcode बैकग्राउंड में आपकी डिपेंडेंसी को अपने-आप रिज़ॉल्व और डाउनलोड करना शुरू कर देगा.

अपने प्रोजेक्ट में 'Google साइन-इन' SDK टूल जोड़ना

  1. Xcode में, अपना ऐप्लिकेशन प्रोजेक्ट खोलने के लिए, फ़ाइल > पैकेज जोड़ें पर जाएं.

  2. जब कहा जाए, तब Google साइन-इन SDK टूल का डेटा स्टोर करने की जगह जोड़ें:

    https://github.com/google/GoogleSignIn-iOS
    
  3. यह काम पूरा होने के बाद, Xcode बैकग्राउंड में आपकी डिपेंडेंसी को अपने-आप रिज़ॉल्व और डाउनलोड करना शुरू कर देगा.

अपने Firebase प्रोजेक्ट के लिए 'Google साइन-इन' चालू करना

उपयोगकर्ताओं को 'Google साइन-इन' का इस्तेमाल करके साइन इन करने की अनुमति देने के लिए, आपको सबसे पहले अपने Firebase प्रोजेक्ट के लिए 'Google साइन इन' की सेवा देने वाली कंपनी चालू करनी होगी:

  1. Firebase कंसोल में, पुष्टि करने की सुविधा वाला सेक्शन खोलें.
  2. साइन इन करने का तरीका टैब पर, Google की सेवा देने वाली कंपनी चालू करें.
  3. सेव करें पर क्लिक करें.

  4. अपने प्रोजेक्ट की GoogleService-Info.plist फ़ाइल की नई कॉपी डाउनलोड करें और उसे अपने Xcode प्रोजेक्ट में कॉपी करें. किसी भी मौजूदा वर्शन को नए वर्शन से ओवरराइट करें. (Firebase को अपने iOS प्रोजेक्ट में जोड़ना सेक्शन देखें.)

ज़रूरी हेडर फ़ाइलें इंपोर्ट करें

सबसे पहले, आपको अपने ऐप्लिकेशन में Firebase SDK टूल और 'Google साइन-इन' SDK टूल की हेडर फ़ाइलें इंपोर्ट करनी होंगी.

Swift

import FirebaseCore
import FirebaseAuth
import GoogleSignIn

Objective-C

@import FirebaseCore;
@import GoogleSignIn;

'Google साइन इन' लागू करना

यह तरीका अपनाकर 'Google साइन-इन' लागू करें. iOS से 'Google साइन-इन' का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, 'Google साइन-इन' डेवलपर का दस्तावेज़ देखें.

  1. अपने Xcode प्रोजेक्ट में कस्टम यूआरएल स्कीम जोड़ें:
    1. अपना प्रोजेक्ट कॉन्फ़िगरेशन खोलें: बाएं ट्री व्यू में, प्रोजेक्ट के नाम पर क्लिक करें. टारगेट सेक्शन से अपना ऐप्लिकेशन चुनें. इसके बाद, जानकारी टैब चुनें और यूआरएल टाइप सेक्शन को बड़ा करें.
    2. + बटन पर क्लिक करें और अपने उलटे गए क्लाइंट आईडी के लिए यूआरएल स्कीम जोड़ें. यह वैल्यू ढूंढने के लिए, GoogleService-Info.plist कॉन्फ़िगरेशन फ़ाइल खोलें और REVERSED_CLIENT_ID कुंजी देखें. उस कुंजी की वैल्यू कॉपी करें और उसे कॉन्फ़िगरेशन पेज पर मौजूद यूआरएल स्कीम बॉक्स में चिपकाएं. अन्य फ़ील्ड को छूट न दें.

      पूरा होने के बाद, आपका कॉन्फ़िगरेशन कुछ ऐसा दिखना चाहिए (लेकिन आपके ऐप्लिकेशन के खास मानों के साथ):

  2. अपने ऐप्लिकेशन का ऐक्सेस देने वाले के application:didFinishLaunchingWithOptions: तरीके में, FirebaseApp ऑब्जेक्ट को कॉन्फ़िगर करें.

    Swift

    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. आपने जिस तरीके को अपना ऐप्लिकेशन मैनेज करने का ऐक्सेस दिया है उसके लिए, application:openURL:options: तरीका लागू करें. इस तरीके को GIDSignIn इंस्टेंस के handleURL तरीके को कॉल करना चाहिए. इससे, पुष्टि की प्रक्रिया के खत्म होने पर आपके ऐप्लिकेशन को मिलने वाले यूआरएल को सही तरीके से हैंडल किया जाएगा.

    Swift

    func application(_ app: UIApplication,
                     open url: URL,
                     options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
      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. 'Google साइन इन' सेवा देने वाली कंपनी के signIn तरीके से अपने ऐप्लिकेशन के लिए प्रज़ेंटिंग व्यू कंट्रोलर और क्लाइंट आईडी पास करें और नतीजे के तौर पर मिलने वाले Google की पुष्टि करने वाले टोकन से, Firebase की पुष्टि करने वाला क्रेडेंशियल बनाएं:

    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: 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)
    
      // ...
    }
    

    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. अपने स्टोरीबोर्ड, XIB फ़ाइल में GIDSignInButton जोड़ें या उसे प्रोग्राम के हिसाब से इंस्टैंशिएट करें. अपने स्टोरीबोर्ड या XIB फ़ाइल में बटन जोड़ने के लिए, कोई व्यू जोड़ें और उसकी कस्टम क्लास को GIDSignInButton पर सेट करें.
  6. ज़रूरी नहीं: अगर आपको बटन को अपनी पसंद के मुताबिक बनाना है, तो ये काम करें:

    Swift

    1. अपने व्यू कंट्रोलर में, साइन इन बटन को प्रॉपर्टी के तौर पर सेट करें.
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. आपने अभी-अभी जिस signInButton प्रॉपर्टी का एलान किया है बटन को उससे कनेक्ट करें.
    3. GIDSignInButton ऑब्जेक्ट की प्रॉपर्टी को सेट करके बटन को पसंद के मुताबिक बनाएं.

    Objective-C

    1. अपने व्यू कंट्रोलर की हेडर फ़ाइल में, 'साइन इन करें' बटन को प्रॉपर्टी के तौर पर बताएं.
      @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
    2. आपने अभी-अभी जिस signInButton प्रॉपर्टी का एलान किया है बटन को उससे कनेक्ट करें.
    3. GIDSignInButton ऑब्जेक्ट की प्रॉपर्टी को सेट करके बटन को पसंद के मुताबिक बनाएं.

Firebase की मदद से पुष्टि करें

आखिर में, पिछले चरण में बनाए गए पुष्टि करने के क्रेडेंशियल की मदद से, Firebase में लॉगिन करने की प्रोसेस पूरी करें.

Swift

Auth.auth().signIn(with: credential) { result, error in

  // 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;
  // ...
}];

अगले चरण

जब कोई उपयोगकर्ता पहली बार साइन इन करता है, तो एक नया उपयोगकर्ता खाता बनाया जाता है और उपयोगकर्ता के क्रेडेंशियल से लिंक किया जाता है. इन क्रेडेंशियल में उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर या पुष्टि करने वाली सेवा की जानकारी शामिल है. यह नया खाता आपके Firebase प्रोजेक्ट के हिस्से के तौर पर सेव किया जाता है. साथ ही, इसका इस्तेमाल आपके प्रोजेक्ट के हर ऐप्लिकेशन में किसी उपयोगकर्ता की पहचान करने के लिए किया जा सकता है. भले ही, उपयोगकर्ता ने किसी भी तरह से साइन इन किया हो.

  • अपने ऐप्लिकेशन में, User ऑब्जेक्ट से उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी ली जा सकती है. उपयोगकर्ताओं को मैनेज करना देखें.

  • अपने Firebase रीयल टाइम डेटाबेस और Cloud Storage के सुरक्षा नियमों में, auth वैरिएबल से साइन-इन किए हुए उपयोगकर्ता का यूनीक यूज़र आईडी पाया जा सकता है और उसका इस्तेमाल करके यह कंट्रोल किया जा सकता है कि उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.

आप पुष्टि करने वाली सेवा देने वाली कंपनियों के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करके, उपयोगकर्ताओं को अपने ऐप्लिकेशन में साइन इन करने की अनुमति दे सकते हैं.

किसी उपयोगकर्ता को साइन आउट करने के लिए, signOut: पर कॉल करें.

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

पुष्टि करने से जुड़ी सभी गड़बड़ियों के लिए, गड़बड़ी को मैनेज करने वाला कोड भी जोड़ा जा सकता है. गड़बड़ियां ठीक करना देखें.