अपने ऐप्लिकेशन में Google Sign-In को इंटिग्रेट करके, उपयोगकर्ताओं को अपने Google खातों का इस्तेमाल करके Firebase से पुष्टि करने की अनुमति दी जा सकती है.
शुरू करने से पहले
Firebase डिपेंडेंसी इंस्टॉल और मैनेज करने के लिए, Swift Package Manager का इस्तेमाल करें.
- Xcode में, अपना ऐप्लिकेशन प्रोजेक्ट खोलकर, फ़ाइल > पैकेज जोड़ें पर जाएं.
- जब कहा जाए, तब Firebase के Apple प्लैटफ़ॉर्म के SDK टूल का रिपॉज़िटरी जोड़ें:
- Firebase Authentication लाइब्रेरी चुनें.
- अपने टारगेट की बिल्ड सेटिंग के अन्य लिंकर फ़्लैग सेक्शन में
-ObjC
फ़्लैग जोड़ें. - प्रोसेस पूरी होने के बाद, Xcode बैकग्राउंड में आपकी डिपेंडेंसी को अपने-आप हल और डाउनलोड करना शुरू कर देगा.
https://github.com/firebase/firebase-ios-sdk.git
अपने प्रोजेक्ट में Google Sign-In SDK टूल जोड़ना
Xcode में, अपना ऐप्लिकेशन प्रोजेक्ट खोलकर, फ़ाइल > पैकेज जोड़ें पर जाएं.
जब कहा जाए, तब Google Sign-In SDK टूल की रिपॉज़िटरी जोड़ें:
https://github.com/google/GoogleSignIn-iOS
प्रोसेस पूरी होने के बाद, Xcode बैकग्राउंड में आपकी डिपेंडेंसी को अपने-आप हल और डाउनलोड करना शुरू कर देगा.
अपने Firebase प्रोजेक्ट के लिए Google Sign-In की सुविधा चालू करना
उपयोगकर्ताओं को Google Sign-In का इस्तेमाल करके साइन इन करने की अनुमति देने के लिए, आपको पहले अपने Firebase प्रोजेक्ट के लिए Google Sign-In की सेवा देने वाली कंपनी को चालू करना होगा:
- Firebase कंसोल में, पुष्टि सेक्शन खोलें.
- साइन इन करने का तरीका टैब में, Google की सेवा देने वाली कंपनी को चालू करें.
सेव करें पर क्लिक करें.
अपने प्रोजेक्ट की
GoogleService-Info.plist
फ़ाइल की नई कॉपी डाउनलोड करें और उसे अपने Xcode प्रोजेक्ट में कॉपी करें. किसी भी मौजूदा वर्शन को नए वर्शन से ओवरराइट करें. (अपने iOS प्रोजेक्ट में Firebase जोड़ें लेख पढ़ें.)
ज़रूरी हेडर फ़ाइलें इंपोर्ट करना
सबसे पहले, आपको अपने ऐप्लिकेशन में Firebase SDK टूल और Google Sign-In SDK टूल की हेडर फ़ाइलें इंपोर्ट करनी होंगी.
import FirebaseCore import FirebaseAuth import GoogleSignIn
@import FirebaseCore; @import GoogleSignIn;
'Google साइन-इन' लागू करना
Google Sign-In को लागू करने के लिए, यह तरीका अपनाएं. iOS पर Google साइन इन का इस्तेमाल करने के बारे में जानकारी पाने के लिए, Google साइन इन के डेवलपर दस्तावेज़ देखें.
- अपने Xcode प्रोजेक्ट में कस्टम यूआरएल स्कीम जोड़ें:
- अपना प्रोजेक्ट कॉन्फ़िगरेशन खोलें: बाईं ओर मौजूद ट्री व्यू में, प्रोजेक्ट के नाम पर क्लिक करें. टारगेट सेक्शन से अपना ऐप्लिकेशन चुनें. इसके बाद, जानकारी टैब चुनें और यूआरएल टाइप सेक्शन को बड़ा करें.
- + बटन पर क्लिक करें और उलटे क्रम में लिखे गए अपने क्लाइंट आईडी के लिए यूआरएल स्कीम जोड़ें. यह वैल्यू ढूंढने के लिए,
कॉन्फ़िगरेशन फ़ाइल खोलें औरGoogleService-Info.plist REVERSED_CLIENT_ID
बटन ढूंढें. उस कुंजी की वैल्यू कॉपी करें और कॉन्फ़िगरेशन पेज पर मौजूद यूआरएल स्कीमा बॉक्स में चिपकाएं. दूसरे फ़ील्ड में कोई बदलाव न करें.कॉन्फ़िगरेशन पूरा होने के बाद, यह कुछ ऐसा दिखेगा (हालांकि, इसमें आपके ऐप्लिकेशन के हिसाब से वैल्यू होंगी):
- अपने ऐप्लिकेशन डेलीगेट के
application:didFinishLaunchingWithOptions:
मéthode में,FirebaseApp
ऑब्जेक्ट को कॉन्फ़िगर करें.FirebaseApp.configure()
// Use Firebase library to configure APIs [FIRApp configure];
- अपने ऐप्लिकेशन के प्रतिनिधि के
application:openURL:options:
तरीके को लागू करें. इस तरीके में,GIDSignIn
इंस्टेंस केhandleURL
तरीके को कॉल करना चाहिए. इससे, पुष्टि की प्रोसेस के आखिर में आपके ऐप्लिकेशन को मिलने वाले यूआरएल को सही तरीके से मैनेज किया जा सकेगा.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]; }
- अपने ऐप्लिकेशन के लिए, प्रज़ेंटिंग व्यू कंट्रोलर और क्लाइंट आईडी को Google साइन इन की सेवा देने वाली कंपनी के
signIn
तरीके पर पास करें. साथ ही, Google के ऑथराइज़ेशन टोकन से Firebase के लिए पुष्टि करने वाला क्रेडेंशियल बनाएं: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 { // ... } }];
- अपने स्टोरीबोर्ड या XIB फ़ाइल में
GIDSignInButton
जोड़ें या इसे प्रोग्राम के हिसाब से इंस्टैंशिएट करें. अपने स्टोरीबोर्ड या XIB फ़ाइल में बटन जोड़ने के लिए, कोई व्यू जोड़ें और उसकी कस्टम क्लास कोGIDSignInButton
पर सेट करें. - ज़रूरी नहीं: अगर आपको बटन को अपनी पसंद के मुताबिक बनाना है, तो यह तरीका अपनाएं:
- अपने व्यू कंट्रोलर में, साइन इन बटन को प्रॉपर्टी के तौर पर दिखाएं.
@IBOutlet weak var signInButton: GIDSignInButton!
- बटन को उस
signInButton
प्रॉपर्टी से कनेक्ट करें जिसे आपने अभी घोषित किया है. - GIDSignInButton ऑब्जेक्ट की प्रॉपर्टी सेट करके, बटन को पसंद के मुताबिक बनाएं.
- अपने व्यू कंट्रोलर की हेडर फ़ाइल में, साइन इन बटन को एक
प्रॉपर्टी के तौर पर दिखाएं.
@property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
- बटन को उस
signInButton
प्रॉपर्टी से कनेक्ट करें जिसे आपने अभी घोषित किया है. - GIDSignInButton ऑब्जेक्ट की प्रॉपर्टी सेट करके, बटन को पसंद के मुताबिक बनाएं.
- अपने व्यू कंट्रोलर में, साइन इन बटन को प्रॉपर्टी के तौर पर दिखाएं.
Firebase से पुष्टि करना
आखिर में, पिछले चरण में बनाए गए पुष्टि करने के क्रेडेंशियल का इस्तेमाल करके, Firebase में लॉगिन करने की प्रोसेस पूरी करें.
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; // ... }];
अगले चरण
जब कोई उपयोगकर्ता पहली बार साइन इन करता है, तो एक नया उपयोगकर्ता खाता बन जाता है. साथ ही, उसे उन क्रेडेंशियल से लिंक कर दिया जाता है जिनका इस्तेमाल करके उपयोगकर्ता ने साइन इन किया था. जैसे, उपयोगकर्ता का नाम और पासवर्ड, फ़ोन नंबर या पुष्टि करने वाली सेवा की जानकारी. यह नया खाता, आपके Firebase प्रोजेक्ट के हिस्से के तौर पर सेव किया जाता है. इसका इस्तेमाल, आपके प्रोजेक्ट के हर ऐप्लिकेशन में किसी उपयोगकर्ता की पहचान करने के लिए किया जा सकता है. भले ही, उपयोगकर्ता साइन इन करने का तरीका कुछ भी हो.
-
अपने ऐप्लिकेशन में, उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी पाने के लिए,
User
ऑब्जेक्ट का इस्तेमाल करें. उपयोगकर्ताओं को मैनेज करें देखें. अपने Firebase Realtime Database और Cloud Storage सुरक्षा नियमों में, आपके पास
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; }
पुष्टि करने से जुड़ी सभी गड़बड़ियों के लिए, गड़बड़ी को हैंडल करने वाला कोड भी जोड़ा जा सकता है. गड़बड़ियां मैनेज करना लेख पढ़ें.