Catch up on highlights from Firebase at Google I/O 2023. Learn more

Apple प्लेटफ़ॉर्म पर Google साइन-इन का उपयोग करके प्रमाणित करें

आप अपने ऐप में Google साइन-इन को एकीकृत करके अपने उपयोगकर्ताओं को उनके Google खातों का उपयोग करके फायरबेस के साथ प्रमाणित करने दे सकते हैं।

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

फायरबेस निर्भरताओं को स्थापित और प्रबंधित करने के लिए स्विफ्ट पैकेज मैनेजर का उपयोग करें।

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

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

  1. Xcode में, अपने ऐप प्रोजेक्ट को खोलने के साथ, File > Add Packages पर नेविगेट करें।

  2. संकेत दिए जाने पर, Google साइन-इन SDK रिपॉजिटरी जोड़ें:

    https://github.com/google/GoogleSignIn-iOS
    
  3. समाप्त होने पर, Xcode स्वचालित रूप से पृष्ठभूमि में आपकी निर्भरताओं को हल करना और डाउनलोड करना शुरू कर देगा।

अपने फायरबेस प्रोजेक्ट के लिए Google साइन-इन सक्षम करें

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

  1. फायरबेस कंसोल में, प्रमाणीकरण अनुभाग खोलें।
  2. साइन इन विधि टैब पर, Google प्रदाता को सक्षम करें।
  3. सहेजें पर क्लिक करें।

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

आवश्यक शीर्षलेख फ़ाइलें आयात करें

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

तीव्र

import FirebaseCore
import FirebaseAuth
import GoogleSignIn

उद्देश्य सी

@import FirebaseCore;
@import GoogleSignIn;

Google साइन-इन लागू करें

इन चरणों का पालन करके Google साइन-इन लागू करें। IOS के साथ Google साइन-इन का उपयोग करने के विवरण के लिए Google साइन-इन डेवलपर दस्तावेज़ देखें।

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

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

  2. आपके ऐप प्रतिनिधि के application:didFinishLaunchingWithOptions: विधि में, FirebaseApp ऑब्जेक्ट को कॉन्फ़िगर करें।

    तीव्र

    FirebaseApp.configure()
    

    उद्देश्य सी

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  3. application:openURL:options: आपके ऐप प्रतिनिधि की विधि। विधि को GIDSignIn उदाहरण के handleURL विधि को कॉल करना चाहिए, जो प्रमाणीकरण प्रक्रिया के अंत में आपके एप्लिकेशन को प्राप्त होने वाले URL को ठीक से संभालेगा।

    तीव्र

    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];
    }
    
  4. Google साइन-इन प्रदाता की signIn विधि के लिए अपने ऐप के लिए प्रेजेंटिंग व्यू कंट्रोलर और क्लाइंट आईडी पास करें और परिणामी Google ऑथेंटिक टोकन से फायरबेस ऑथेंटिकेशन क्रेडेंशियल बनाएं:

    तीव्र

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

    तीव्र

    1. अपने व्यू कंट्रोलर में, साइन-इन बटन को प्रॉपर्टी के रूप में घोषित करें।
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. बटन को आपके द्वारा घोषित signInButton संपत्ति से कनेक्ट करें।
    3. GIDSignInButton ऑब्जेक्ट के गुणों को सेट करके बटन को अनुकूलित करें।

    उद्देश्य सी

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

फायरबेस के साथ प्रमाणित करें

अंत में, पिछले चरण में बनाए गए प्रामाणिक क्रेडेंशियल के साथ फायरबेस लॉगिन प्रक्रिया को पूरा करें।

तीव्र

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

अगले कदम

उपयोगकर्ता द्वारा पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बनाया जाता है और क्रेडेंशियल्स से लिंक किया जाता है—यानी, उपयोगकर्ता नाम और पासवर्ड, फ़ोन नंबर, या प्रमाणीकरण प्रदाता जानकारी—जिसके साथ उपयोगकर्ता ने साइन इन किया है। यह नया खाता आपके फायरबेस प्रोजेक्ट के हिस्से के रूप में संग्रहीत है, और उपयोगकर्ता द्वारा साइन इन किए जाने पर ध्यान दिए बिना, आपके प्रोजेक्ट में प्रत्येक ऐप में उपयोगकर्ता की पहचान करने के लिए इसका उपयोग किया जा सकता है।

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

  • आपके फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप auth चर से साइन-इन किए गए उपयोगकर्ता की विशिष्ट उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

आप प्रमाणीकरण प्रदाता क्रेडेंशियल्स को किसी मौजूदा उपयोगकर्ता खाते से लिंक करके उपयोगकर्ताओं को एकाधिक प्रमाणीकरण प्रदाताओं का उपयोग करके अपने ऐप में साइन इन करने की अनुमति दे सकते हैं।

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

तीव्र

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

आप प्रमाणीकरण त्रुटियों की पूरी श्रृंखला के लिए त्रुटि प्रबंधन कोड भी जोड़ना चाह सकते हैं। हैंडल एरर देखें।