Google is committed to advancing racial equity for Black communities. See how.
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

फोन नंबर का उपयोग करके iOS पर फायरबेस के साथ प्रमाणीकरण

आप उपयोगकर्ता के फोन पर एक एसएमएस संदेश भेजकर उपयोगकर्ता को साइन इन करने के लिए फायरबेस प्रमाणीकरण का उपयोग कर सकते हैं। एसएमएस संदेश में निहित एक बार कोड का उपयोग करने में उपयोगकर्ता संकेत करता है।

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

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

  1. अपने iOS प्रोजेक्ट में Firebase जोड़ें
  2. अपने Podfile में निम्नलिखित फली शामिल करें:
    pod 'Firebase/Auth'
    
  3. अगर आपने अभी तक अपने ऐप को अपने फायरबेस प्रोजेक्ट से कनेक्ट नहीं किया है, तो फायरबेस कंसोल से करें

सुरक्षा चिंतायें

केवल फोन नंबर का उपयोग करके प्रमाणीकरण, जबकि सुविधाजनक, अन्य उपलब्ध तरीकों की तुलना में कम सुरक्षित है, क्योंकि फोन नंबर का कब्ज़ा आसानी से उपयोगकर्ताओं के बीच स्थानांतरित किया जा सकता है। इसके अलावा, कई उपयोगकर्ता प्रोफाइल वाले उपकरणों पर, कोई भी उपयोगकर्ता जो एसएमएस संदेश प्राप्त कर सकता है, डिवाइस के फोन नंबर का उपयोग करके किसी खाते में प्रवेश कर सकता है।

यदि आप अपने ऐप में फ़ोन नंबर आधारित साइन-इन का उपयोग करते हैं, तो आपको इसे अधिक सुरक्षित साइन-इन विधियों के साथ पेश करना चाहिए, और फ़ोन नंबर साइन-इन का उपयोग करके सुरक्षा ट्रेडऑफ़ के उपयोगकर्ताओं को सूचित करना चाहिए।

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

एसएमएस द्वारा उपयोगकर्ताओं में साइन इन करने के लिए, आपको सबसे पहले अपने फायरबेस प्रोजेक्ट के लिए फोन नंबर साइन-इन विधि को सक्षम करना होगा:

  1. Firebase कंसोल में , प्रमाणीकरण अनुभाग खोलें।
  2. साइन-इन विधि पृष्ठ पर, फ़ोन नंबर साइन-इन विधि सक्षम करें।

फायरबेस का फोन नंबर साइन-इन अनुरोध कोटा इतना अधिक है कि अधिकांश ऐप प्रभावित नहीं होंगे। हालाँकि, यदि आपको फ़ोन प्रमाणीकरण वाले उपयोगकर्ताओं की बहुत अधिक मात्रा में साइन इन करने की आवश्यकता है, तो आपको अपनी मूल्य निर्धारण योजना को अपग्रेड करने की आवश्यकता हो सकती है। मूल्य पृष्ठ देखें।

एप्लिकेशन सत्यापन सक्षम करें

फ़ोन नंबर प्रमाणीकरण का उपयोग करने के लिए, फायरबेस को यह सत्यापित करने में सक्षम होना चाहिए कि आपके ऐप से फ़ोन नंबर साइन-इन अनुरोध आ रहे हैं। फायरबेस प्रमाणीकरण के दो तरीके हैं:

  • साइलेंट एपीएन नोटिफिकेशन : जब आप किसी डिवाइस पर पहली बार किसी यूजर के फोन नंबर के साथ साइन इन करते हैं, तो फायरबेस ऑथेंटिकेशन एक साइलेंट पुश नोटिफिकेशन का उपयोग कर डिवाइस को टोकन भेजता है। यदि आपका ऐप सफलतापूर्वक Firebase से सूचना प्राप्त करता है, तो फ़ोन नंबर साइन-इन आगे बढ़ सकता है।

    IOS 8.0 और नए के लिए, मौन सूचनाओं के लिए स्पष्ट उपयोगकर्ता सहमति की आवश्यकता नहीं होती है और इसलिए ऐप में APNs सूचनाएं प्राप्त करने में कमी करने वाले उपयोगकर्ता द्वारा अप्रभावित रहता है। इस प्रकार, ऐप को फायरबेस फोन नंबर ऑरल को लागू करते समय पुश सूचनाएं प्राप्त करने के लिए उपयोगकर्ता की अनुमति का अनुरोध करने की आवश्यकता नहीं है।

  • reCAPTCHA वेरिफिकेशन : इस घटना में कि साइलेंट पुश नोटिफिकेशन भेजना या प्राप्त करना संभव नहीं है, जैसे जब यूजर ने आपके ऐप के लिए बैकग्राउंड रिफ्रेश को डिसेबल कर दिया हो, या iOS सिम्युलेटर पर आपके ऐप को टेस्ट करते समय, फायरबेस ऑथेंटिकेशन फोन को पूरा करने के लिए reCAPTCHA वेरिफिकेशन का उपयोग करता है। साइन-इन प्रवाह। ReCAPTCHA चुनौती अक्सर उपयोगकर्ता को कुछ भी हल करने के बिना पूरा किया जा सकता है।

जब मूक धक्का सूचनाएं ठीक से कॉन्फ़िगर की जाती हैं, तो केवल बहुत ही कम प्रतिशत उपयोगकर्ता reCAPTCHA प्रवाह का अनुभव करेंगे। फिर भी, आपको यह सुनिश्चित करना चाहिए कि फ़ोन नंबर साइन-इन फ़ंक्शन सही ढंग से है या नहीं, मूक पुश सूचनाएं उपलब्ध हैं या नहीं।

मूक सूचनाएं प्राप्त करना शुरू करें

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

  1. Xcode में, अपने प्रोजेक्ट के लिए पुश सूचनाएँ सक्षम करें।
  2. अपने APNs प्रमाणीकरण कुंजी को Firebase पर अपलोड करें। यदि आपके पास पहले से ही APNs प्रमाणीकरण कुंजी नहीं है, तो FCN के साथ APNs कॉन्फ़िगर करना देखें।

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

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

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

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

ReCAPTCHA सत्यापन सेट करें

Firebase SDK को reCAPTCHA सत्यापन का उपयोग करने में सक्षम करने के लिए:

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

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

  2. वैकल्पिक : यदि आप उपयोगकर्ता को reCAPTCHA प्रदर्शित करते समय अपने ऐप को SFSafariViewController या UIWebView प्रस्तुत करने के तरीके को अनुकूलित करना चाहते हैं, तो एक कस्टम वर्ग बनाएं, जो FIRAuthUIDelegate प्रोटोकॉल के अनुरूप हो, और इसे verifyPhoneNumber:UIDelegate:completion:

उपयोगकर्ता के फोन पर एक सत्यापन कोड भेजें

फ़ोन नंबर साइन-इन आरंभ करने के लिए, उपयोगकर्ता को एक इंटरफ़ेस प्रस्तुत करें जो उन्हें अपना फ़ोन नंबर प्रदान करने के लिए संकेत देता है, और फिर verifyPhoneNumber:UIDelegate:completion: कॉल करें verifyPhoneNumber:UIDelegate:completion: अनुरोध करने के लिए कि verifyPhoneNumber:UIDelegate:completion: एसएमएस द्वारा उपयोगकर्ता के फोन पर एक प्रमाणीकरण कोड भेजें:

  1. उपयोगकर्ता का फ़ोन नंबर प्राप्त करें।

    कानूनी आवश्यकताएं बदलती हैं, लेकिन एक सर्वोत्तम अभ्यास के रूप में और अपने उपयोगकर्ताओं के लिए अपेक्षाएं निर्धारित करने के लिए, आपको उन्हें सूचित करना चाहिए कि यदि वे फोन साइन-इन का उपयोग करते हैं, तो वे सत्यापन और मानक दरों के लिए एक एसएमएस संदेश प्राप्त कर सकते हैं।

  2. कॉल verifyPhoneNumber:UIDelegate:completion: यह उपयोगकर्ता के फोन नंबर के लिए गुजर रहा है।

    तीव्र

    PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate: nil) { (verificationID, error) in
      if let error = error {
        self.showMessagePrompt(error.localizedDescription)
        return
      }
      // Sign in using the verificationID and the code sent to the user
      // ...
    }

    उद्देश्य सी

    [[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput
                                            UIDelegate:nil
                                            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
      if (error) {
        [self showMessagePrompt:error.localizedDescription];
        return;
      }
      // Sign in using the verificationID and the code sent to the user
      // ...
    }];

    जब आप verifyPhoneNumber:UIDelegate:completion: , तो Firebase आपके ऐप पर एक मौन पुश सूचना भेजता है, या उपयोगकर्ता के लिए एक reCAPTCHA चुनौती जारी करता है। जब आपका ऐप सूचना प्राप्त करता है या उपयोगकर्ता reCAPTCHA चुनौती को पूरा करता है, तो Firebase एक एसएमएस संदेश भेजता है जिसमें एक प्रमाणीकरण कोड होता है जो निर्दिष्ट फ़ोन नंबर पर होता है और आपके पूर्ण होने के लिए एक सत्यापन आईडी पास करता है। उपयोगकर्ता में हस्ताक्षर करने के लिए आपको सत्यापन कोड और सत्यापन आईडी दोनों की आवश्यकता होगी।

    फायरबेस द्वारा भेजे गए एसएमएस संदेश को आपके प्रामाणिक उदाहरण पर भाषा कोड के माध्यम से किसी अन्य languageCode को निर्दिष्ट करके स्थानीयकृत भी किया जा सकता है।

    तीव्र

     // Change language code to french.
     Auth.auth().languageCode = "fr";
    

    उद्देश्य सी

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
    
  3. सत्यापन आईडी सहेजें और जब आपका ऐप लोड हो जाए तो उसे पुनर्स्थापित करें। ऐसा करने से, आप सुनिश्चित कर सकते हैं कि आपके पास अभी भी एक वैध सत्यापन आईडी है यदि आपका ऐप उपयोगकर्ता द्वारा साइन-इन प्रवाह (उदाहरण के लिए, एसएमएस ऐप पर स्विच करते समय) पूरा होने से पहले समाप्त हो गया है।

    आप किसी भी तरह से सत्यापन आईडी को जारी रख सकते हैं। एक सरल तरीका NSUserDefaults ऑब्जेक्ट के साथ सत्यापन आईडी को सहेजना है:

    तीव्र

    UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
    

    उद्देश्य सी

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:verificationID forKey:@"authVerificationID"];
    

    फिर, आप सहेजे गए मान को पुनर्स्थापित कर सकते हैं:

    तीव्र

    let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
    

    उद्देश्य सी

    NSString *verificationID = [defaults stringForKey:@"authVerificationID"];
    

अगर verifyPhoneNumber:UIDelegate:completion: को कॉल करना verifyPhoneNumber:UIDelegate:completion: सफल हो जाता है, तो आप उपयोगकर्ता को एसएमएस संदेश में प्राप्त होने पर सत्यापन कोड टाइप करने के लिए संकेत दे सकते हैं।

सत्यापन कोड के साथ उपयोगकर्ता में साइन इन करें

उपयोगकर्ता द्वारा एसएमएस संदेश से सत्यापन कोड के साथ अपना ऐप प्रदान करने के बाद, सत्यापन कोड और सत्यापन आईडी से एक FIRPhoneAuthCredential ऑब्जेक्ट बनाकर उपयोगकर्ता को साइन इन करें और उस ऑब्जेक्ट को signInWithCredential:completion: करना signInWithCredential:completion:

  1. उपयोगकर्ता से सत्यापन कोड प्राप्त करें।
  2. सत्यापन कोड और सत्यापन आईडी से एक FIRPhoneAuthCredential ऑब्जेक्ट बनाएं।

    तीव्र

    let credential = PhoneAuthProvider.provider().credential(
        withVerificationID: verificationID,
        verificationCode: verificationCode)

    उद्देश्य सी

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. FIRPhoneAuthCredential ऑब्जेक्ट के साथ उपयोगकर्ता में साइन इन करें:

    तीव्र

    Auth.auth().signIn(with: credential) { (authResult, error) in
      if let error = error {
        let authError = error as NSError
        if (isMFAEnabled && authError.code == AuthErrorCode.secondFactorRequired.rawValue) {
          // The user is a multi-factor user. Second factor challenge is required.
          let resolver = authError.userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
          var displayNameString = ""
          for tmpFactorInfo in (resolver.hints) {
            displayNameString += tmpFactorInfo.displayName ?? ""
            displayNameString += " "
          }
          self.showTextInputPrompt(withMessage: "Select factor to sign in\n\(displayNameString)", completionBlock: { userPressedOK, displayName in
            var selectedHint: PhoneMultiFactorInfo?
            for tmpFactorInfo in resolver.hints {
              if (displayName == tmpFactorInfo.displayName) {
                selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
              }
            }
            PhoneAuthProvider.provider().verifyPhoneNumber(with: selectedHint!, uiDelegate: nil, multiFactorSession: resolver.session) { verificationID, error in
              if error != nil {
                print("Multi factor start sign in failed. Error: \(error.debugDescription)")
              } else {
                self.showTextInputPrompt(withMessage: "Verification code for \(selectedHint?.displayName ?? "")", completionBlock: { userPressedOK, verificationCode in
                  let credential: PhoneAuthCredential? = PhoneAuthProvider.provider().credential(withVerificationID: verificationID!, verificationCode: verificationCode!)
                  let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator.assertion(with: credential!)
                  resolver.resolveSignIn(with: assertion!) { authResult, error in
                    if error != nil {
                      print("Multi factor finanlize sign in failed. Error: \(error.debugDescription)")
                    } else {
                      self.navigationController?.popViewController(animated: true)
                    }
                  }
                })
              }
            }
          })
        } else {
          self.showMessagePrompt(error.localizedDescription)
          return
        }
        // ...
        return
      }
      // 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;
      // ...
    }];

काल्पनिक फोन नंबर के साथ टेस्ट करें

आप फायरबेस कंसोल के माध्यम से विकास के लिए काल्पनिक फोन नंबर सेट कर सकते हैं। काल्पनिक फोन नंबरों के साथ परीक्षण ये लाभ प्रदान करता है:

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

काल्पनिक फोन नंबर इन आवश्यकताओं को पूरा करना चाहिए:

  1. सुनिश्चित करें कि आप फोन नंबर का उपयोग करते हैं जो वास्तव में काल्पनिक हैं, और पहले से मौजूद नहीं हैं। Firebase प्रमाणीकरण आपको मौजूदा फ़ोन नंबर को वास्तविक उपयोगकर्ताओं द्वारा परीक्षण नंबर के रूप में उपयोग करने की अनुमति नहीं देता है। एक विकल्प यूएस टेस्ट फोन नंबर के रूप में 555 उपसर्ग संख्या का उपयोग करना है, उदाहरण के लिए: +1 650-555-3434
  2. लंबाई और अन्य बाधाओं के लिए फोन नंबर को सही ढंग से फॉर्मेट करना होगा। वे अभी भी एक वास्तविक उपयोगकर्ता के फ़ोन नंबर के समान सत्यापन से गुजरेंगे।
  3. आप विकास के लिए 10 फोन नंबर जोड़ सकते हैं।
  4. परीक्षण फोन नंबर / कोड का उपयोग करें जो अक्सर अनुमान लगाने और बदलने में कठिन होते हैं।

काल्पनिक फोन नंबर और सत्यापन कोड बनाएं

  1. Firebase कंसोल में , प्रमाणीकरण अनुभाग खोलें।
  2. साइन इन विधि टैब में, फ़ोन प्रदाता को सक्षम करें यदि आपने पहले से नहीं किया है।
  3. Accordion मेनू का परीक्षण करने के लिए फ़ोन नंबर खोलें।
  4. उदाहरण के लिए, वह फ़ोन नंबर प्रदान करें जिसे आप परीक्षण करना चाहते हैं: +1 650-555-3434
  5. उस विशिष्ट संख्या के लिए 6-अंकीय सत्यापन कोड प्रदान करें, उदाहरण के लिए: 654321
  6. संख्या जोड़ें । यदि कोई आवश्यकता है, तो आप संबंधित पंक्ति पर मँडरा और ट्रैश आइकन पर क्लिक करके फ़ोन नंबर और उसके कोड को हटा सकते हैं।

मैनुअल परीक्षण

आप सीधे अपने आवेदन में एक काल्पनिक फोन नंबर का उपयोग शुरू कर सकते हैं। यह आपको कोटा मुद्दों या थ्रॉटलिंग में चलने के बिना विकास चरणों के दौरान मैनुअल परीक्षण करने की अनुमति देता है। आप Google Play Services को इंस्टॉल किए बिना iOS सिम्युलेटर या एंड्रॉइड एमुलेटर से भी सीधे परीक्षण कर सकते हैं।

जब आप काल्पनिक फोन नंबर प्रदान करते हैं और सत्यापन कोड भेजते हैं, तो कोई वास्तविक एसएमएस नहीं भेजा जाता है। इसके बजाय, आपको साइन इन को पूरा करने के लिए पहले से कॉन्फ़िगर किया गया सत्यापन कोड प्रदान करना होगा।

साइन-इन पूरा होने पर, उस फोन नंबर के साथ एक फायरबेस उपयोगकर्ता बनाया जाता है। उपयोगकर्ता के पास वास्तविक फोन नंबर उपयोगकर्ता के समान व्यवहार और गुण हैं, और उसी तरह से रियलटाइम डेटाबेस / क्लाउड फायरस्टार और अन्य सेवाओं तक पहुंच सकते हैं। इस प्रक्रिया के दौरान की गई आईडी टोकन में वास्तविक फोन नंबर उपयोगकर्ता के समान हस्ताक्षर हैं।

एक अन्य विकल्प इन उपयोगकर्ताओं पर कस्टम दावों के माध्यम से एक परीक्षण भूमिका निर्धारित करना है ताकि यदि आप आगे पहुंच को प्रतिबंधित करना चाहते हैं, तो उन्हें नकली उपयोगकर्ता के रूप में अंतर कर सकें।

एकीकरण जांच

मैनुअल परीक्षण के अलावा, फायरबेस प्रमाणीकरण फोन एपीआई परीक्षण के लिए एकीकरण परीक्षण लिखने में मदद करने के लिए एपीआई प्रदान करता है। ये API iOS में वेब और साइलेंट पुश नोटिफिकेशन में reCAPTCHA आवश्यकता को अक्षम करके ऐप वेरिफिकेशन को अक्षम कर देता है। यह इन प्रवाह में स्वचालन परीक्षण को संभव बनाता है और लागू करने में आसान होता है। इसके अलावा, वे एंड्रॉइड पर तत्काल सत्यापन प्रवाह का परीक्षण करने की क्षमता प्रदान करने में मदद करते हैं।

IOS पर, appVerificationDisabledForTesting सेटिंग verifyPhoneNumber कॉल करने से पहले TRUE सेट की जानी चाहिए। इसे किसी एपीएन टोकन की आवश्यकता के बिना संसाधित किया जाता है या पृष्ठभूमि में मूक धक्का सूचनाएं भेजना, सिम्युलेटर में परीक्षण करना आसान बनाता है। यह reCAPTCHA फ़ॉलबैक प्रवाह को भी अक्षम करता है।

ध्यान दें कि जब एप्लिकेशन सत्यापन अक्षम हो जाता है, तो एक गैर-काल्पनिक फोन नंबर का उपयोग करके साइन इन को पूरा करने में विफल हो जाएगा। इस एपीआई के साथ केवल काल्पनिक फोन नंबर का उपयोग किया जा सकता है।

तीव्र

let phoneNumber = "+16505554567"

// This test verification code is specified for the given test phone number in the developer console.
let testVerificationCode = "123456"

Auth.auth().settings.isAppVerificationDisabledForTesting = TRUE
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate:nil) {
                                                            verificationID, error in
    if (error) {
      // Handles error
      self.handleError(error)
      return
    }
    let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID ?? "",
                                                               verificationCode: testVerificationCode)
    Auth.auth().signInAndRetrieveData(with: credential) { authData, error in
      if (error) {
        // Handles error
        self.handleError(error)
        return
      }
      _user = authData.user
    }];
}];

उद्देश्य सी

NSString *phoneNumber = @"+16505554567";

// This test verification code is specified for the given test phone number in the developer console.
NSString *testVerificationCode = @"123456";

[FIRAuth auth].settings.appVerificationDisabledForTesting = YES;
[[FIRPhoneAuthProvider provider] verifyPhoneNumber:phoneNumber
                                        completion:^(NSString *_Nullable verificationID,
                                                     NSError *_Nullable error) {
    if (error) {
      // Handles error
      [self handleError:error];
      return;
    }
    FIRAuthCredential *credential =
        [FIRPhoneAuthProvider credentialWithVerificationID:verificationID
                                          verificationCode:testVerificationCode];
    [FIRAuth auth] signInWithAndRetrieveDataWithCredential:credential
                                                completion:^(FIRUser *_Nullable user,
                                                             NSError *_Nullable error) {
      if (error) {
        // Handles error
        [self handleError:error];
        return;
      }
      _user = user;
    }];
}];

परिशिष्ट: स्विज़लिंग के बिना फोन साइन-इन का उपयोग करना

फायरबेस ऑथेंटिकेशन, आपके ऐप को भेजे गए साइलेंट पुश नोटिफिकेशन को हैंडल करने के लिए, और सत्यापन के दौरान reCAPTCHA पेज से कस्टम स्कीम को रीडायरेक्ट करने के लिए स्वचालित रूप से इंटरसेप्ट करने के लिए आपके ऐप के APNs टोकन को प्राप्त करने के लिए स्वचालित रूप से स्विज़लिंग का उपयोग करता है।

यदि आप स्विज़लिंग का उपयोग नहीं करना पसंद करते हैं, तो आप इसे फ्लैग FirebaseAppDelegateProxyEnabled को अपने ऐप की Info.plist फ़ाइल में जोड़कर और इसे NO सेट करके अक्षम कर सकते हैं। ध्यान दें कि इस ध्वज को NO सेट करने से Firebase Cloud Messaging सहित अन्य Firebase उत्पादों के लिए स्विज़लिंग भी अक्षम हो जाती है।

यदि आप स्विज़लिंग को अक्षम कर देते हैं, तो आपको स्पष्ट रूप से APNs डिवाइस टोकन, पुश सूचनाएँ और कस्टम स्कीम को पुनर्निर्देशित URL को फायरबेस प्रमाणीकरण में पास करना होगा।

APNs डिवाइस टोकन प्राप्त करने के लिए, application:didRegisterForRemoteNotificationsWithDeviceToken: लागू करें application:didRegisterForRemoteNotificationsWithDeviceToken: विधि, और इसमें, FIRAuth डिवाइस टोकन पास करें setAPNSToken:type: विधि।

तीव्र

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  // Pass device token to auth
  Auth.auth().setAPNSToken(deviceToken, type: .prod)

  // Further handling of the device token if needed by the app
  // ...
}

उद्देश्य सी

- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  // Pass device token to auth.
  [[FIRAuth auth] setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeProd];
  // Further handling of the device token if needed by the app.
}

धक्का सूचनाओं को संभालने के लिए, application:didReceiveRemoteNotification:fetchCompletionHandler: विधि, application:didReceiveRemoteNotification:fetchCompletionHandler: संबंधित सूचनाओं को FIRAuth के canHandleNotification: विधि से कॉल FIRAuth

तीव्र

func application(_ application: UIApplication,
    didReceiveRemoteNotification notification: [AnyHashable : Any],
    fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  if Auth.auth().canHandleNotification(notification) {
    completionHandler(.noData)
    return
  }
  // This notification is not auth related, developer should handle it.
}

उद्देश्य सी

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)notification
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // Pass notification to auth and check if they can handle it.
  if ([[FIRAuth auth] canHandleNotification:notification]) {
    completionHandler(UIBackgroundFetchResultNoData);
    return;
  }
  // This notification is not auth related, developer should handle it.
}

कस्टम स्कीम को पुनर्निर्देशित URL को संभालने के लिए, application:openURL:sourceApplication:annotation: लागू करें application:openURL:sourceApplication:annotation: iOS 8 और पुराने चलाने वाले उपकरणों के लिए विधि, और application:openURL:options: iOS 9 और नए चलाने वाले उपकरणों के लिए विधि, और उनमें, पास करें। FIRAuth के canHandleURL विधि का URL।

तीव्र

// For iOS 9+
func application(_ application: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  if Auth.auth().canHandle(url) {
    return true
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
func application(_ application: UIApplication,
                 open url: URL,
                 sourceApplication: String?,
                 annotation: Any) -> Bool {
  if Auth.auth().canHandle(url) {
    Return true
  }
  // URL not auth related, developer should handle it.
}

उद्देश्य सी

// For iOS 9+
- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

// For iOS 8-
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related, developer should handle it.
}

यदि आप SwiftUI या UISceneDelegate का उपयोग कर रहे हैं, तो पुनर्निर्देशित URL को संभालने के लिए, scene:openURLContexts: लागू करें scene:openURLContexts: पद्धति, और उनमें, URL को FIRAuth के canHandleURL विधि से पास करें।

तीव्र

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
  for urlContext in URLContexts {
      let url = urlContext.url
      Auth.auth().canHandle(url)
  }
  // URL not auth related, developer should handle it.
}

उद्देश्य सी

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
  for (UIOpenURLContext *urlContext in URLContexts) {
    [FIRAuth.auth canHandleURL:urlContext.url];
    // URL not auth related, developer should handle it.
  }
}

अगला कदम

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

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

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

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

किसी उपयोगकर्ता को साइन आउट करने के लिए signOut: करें 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;
}

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