फ़ोन नंबर की पुष्टि

फ़ोन से पुष्टि करने की सुविधा की मदद से उपयोगकर्ता, Firebase में साइन इन कर सकते हैं. इसके लिए वे अपने फ़ोन का इस्तेमाल, पुष्टि करने वाले के तौर पर कर सकते हैं. एक एसएमएस मैसेज भेजा गया (दिए गए फ़ोन नंबर का इस्तेमाल करके) यूनीक कोड शामिल करें. कोड की पुष्टि होने के बाद, उपयोगकर्ता साइन कर सकता है Firebase में एक्सपोर्ट करने के लिए किया जा सकता है.

असली उपयोगकर्ताओं के पुष्टि करने के लिए दिए गए फ़ोन नंबर, Google को भेजे जाएंगे और उन्हें सेव किया जाएगा. इससे स्पैम और बुरे बर्ताव को बेहतर बनाने में मदद मिलेगी की रोकथाम के लिए बनी है. इनमें Firebase के अलावा, और भी चीज़ें शामिल हो सकती हैं. डेवलपर को यह पक्का करना होगा कि उनके पास Firebase से पुष्टि करने की सुविधा के लिए, फ़ोन नंबर की पुष्टि करने वाली सेवा.authentication का इस्तेमाल करने से पहले, असली उपयोगकर्ता की सही सहमति

Firebase फ़ोन से पुष्टि करने की सुविधा सभी देशों में काम नहीं करती. ज़्यादा जानकारी के लिए, कृपया अक्सर पूछे जाने वाले सवाल देखें.

सेटअप

फ़ोन नंबर की मदद से पुष्टि करने की प्रक्रिया शुरू करने से पहले, पक्का करें कि आपने यह तरीका अपनाया हो:

  1. Firebase कंसोल में, साइन इन करने के तरीके के तौर पर फ़ोन को चालू करें.
  2. Android: अगर आपने पहले से ही Firebase कंसोल में अपने ऐप्लिकेशन का SHA-1 हैश सेट नहीं किया है, तो ऐसा करें. अपने ऐप्लिकेशन का SHA-1 हैश ढूंढने के बारे में जानकारी के लिए, अपने क्लाइंट की पुष्टि करना देखें.
  3. iOS: Xcode में, अपने प्रोजेक्ट के लिए पुश नोटिफ़िकेशन चालू करें और पक्का करें कि आपकी एपीएन पुष्टि कुंजी, Firebase क्लाउड से मैसेज (FCM) के साथ कॉन्फ़िगर की गई है. इसके अलावा, आपको ये काम भी करने होंगे रिमोट सूचनाओं के लिए बैकग्राउंड मोड चालू करें. इस चरण की पूरी जानकारी देखने के लिए, Firebase iOS फ़ोन से पुष्टि करने से जुड़ा दस्तावेज़ देखें.
  4. वेब: पक्का करें कि आपने Firebase कंसोल पर अपने ऐप्लिकेशन डोमेन को OAuth रीडायरेक्ट डोमेन.

ध्यान दें; फ़ोन नंबर से साइन-इन करने की सुविधा, सिर्फ़ रीयल डिवाइसों और वेब पर इस्तेमाल की जा सकती है. डिवाइस एम्युलेटर पर, पुष्टि करने के फ़्लो की जांच करने के लिए, कृपया जांच देखें.

इस्तेमाल किए जाने से जुड़ी जानकारी

Flutter के लिए Firebase की पुष्टि करने वाला SDK टूल, किसी उपयोगकर्ता को उसके फ़ोन नंबर से साइन इन करने के दो अलग-अलग तरीके उपलब्ध कराता है. नेटिव (जैसे कि Android और iOS) प्लैटफ़ॉर्म वेब के मुकाबले किसी फ़ोन नंबर की पुष्टि करने की अलग सुविधा होती है. इसलिए, हर प्लैटफ़ॉर्म के लिए खास तौर पर दो तरीके मौजूद हैं:

  • नेटिव प्लैटफ़ॉर्म: verifyPhoneNumber.
  • वेब प्लैटफ़ॉर्म: signInWithPhoneNumber.

निजी: verifyPhoneNumber

नेटिव प्लैटफ़ॉर्म पर, उपयोगकर्ता के फ़ोन नंबर की पहले पुष्टि करना ज़रूरी होता है. इसके बाद, उपयोगकर्ता साइन-इन कर सकता है या अपने खाते को PhoneAuthCredential.

सबसे पहले, आपको उपयोगकर्ता को उसका फ़ोन नंबर डालना होगा. एक बार दिए जाने के बाद, verifyPhoneNumber() तरीके को कॉल करें:

await FirebaseAuth.instance.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationCompleted: (PhoneAuthCredential credential) {},
  verificationFailed: (FirebaseAuthException e) {},
  codeSent: (String verificationId, int? resendToken) {},
  codeAutoRetrievalTimeout: (String verificationId) {},
);

आपको चार अलग-अलग कॉलबैक मैनेज करने होंगे. हर कॉलबैक से यह तय होगा कि ऐप्लिकेशन यूज़र इंटरफ़ेस (यूआई) को कैसे अपडेट किया जाएगा:

  1. पुष्टि हो गई है: Android डिवाइसों पर मैसेज (एसएमएस) कोड को अपने-आप मैनेज किया जा रहा है.
  2. पुष्टि नहीं हो सकी: अमान्य फ़ोन नंबर जैसी कार्रवाइयों में गड़बड़ी होने पर या एसएमएस भेजने का कोटा खत्म हो गया है या नहीं, जैसी गड़बड़ियों को मैनेज करें.
  3. codeSent: यह मैनेज करें कि डिवाइस पर Firebase से कोड भेजा जाए. इसका इस्तेमाल करके, उपयोगकर्ताओं से कोड डालने के लिए कहा जाता है.
  4. codeAutoRetrievalTimeout: इसकी मदद से, एसएमएस के अपने-आप हैंडल होने की प्रोसेस फ़ेल होने पर, टाइम आउट को मैनेज करें.

पुष्टि की प्रोसेस पूरी हुई

यह हैंडलर सिर्फ़ उन Android डिवाइसों पर कॉल किया जाएगा जिन पर एसएमएस कोड के अपने-आप रिज़ॉल्यूशन की सुविधा काम करती है.

डिवाइस पर मैसेज (एसएमएस) कोड के डिलीवर होने पर, Android बिना किसी रुकावट के मैसेज (एसएमएस) कोड की पुष्टि अपने-आप कर देगा उपयोगकर्ता को मैन्युअल रूप से कोड डालना ज़रूरी है. अगर यह इवेंट होता है, तो एक PhoneAuthCredential अपने-आप मिल जाता है, जिसे का इस्तेमाल, उपयोगकर्ता के फ़ोन नंबर से साइन-इन करने या उसे लिंक करने के लिए किया जाता है.

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationCompleted: (PhoneAuthCredential credential) async {
    // ANDROID ONLY!

    // Sign the user in (or link) with the auto-generated credential
    await auth.signInWithCredential(credential);
  },
);

पुष्टि नहीं हो सकी

अगर Firebase कोई गड़बड़ी दिखाता है, जैसे कि गलत फ़ोन नंबर या प्रोजेक्ट के लिए एसएमएस की तय सीमा पार हो गई हो, इस हैंडलर को एक FirebaseAuthException भेजा जाएगा. इस स्थिति में, किसी गड़बड़ी के आधार पर आप उपयोगकर्ता को कोई सूचना देंगे कि कोई गड़बड़ी हुई है कोड.

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  verificationFailed: (FirebaseAuthException e) {
    if (e.code == 'invalid-phone-number') {
      print('The provided phone number is not valid.');
    }

    // Handle other errors
  },
);

कोड भेजा गया

जब Firebase डिवाइस पर मैसेज (एसएमएस) कोड भेजता है, तो यह हैंडलर verificationId और resendToken (resendToken) के साथ ट्रिगर होता है सिर्फ़ Android डिवाइसों पर काम करता है, iOS डिवाइस हमेशा null की वैल्यू दिखाएंगे).

ट्रिगर हो जाने के बाद, अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को अपडेट करने का यह बेहतर समय है, ताकि उपयोगकर्ता को वह एसएमएस कोड डालने का निर्देश दिया जा सके जिसकी वे उम्मीद कर रहे हैं. एसएमएस कोड डालने के बाद, पुष्टि करने के आईडी को एसएमएस के साथ जोड़कर नया PhoneAuthCredential बनाएं:

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  codeSent: (String verificationId, int? resendToken) async {
    // Update the UI - wait for the user to enter the SMS code
    String smsCode = 'xxxx';

    // Create a PhoneAuthCredential with the code
    PhoneAuthCredential credential = PhoneAuthProvider.credential(verificationId: verificationId, smsCode: smsCode);

    // Sign the user in (or link) with the credential
    await auth.signInWithCredential(credential);
  },
);

अगर Firebase हाल ही में भेजा गया है, तो डिफ़ॉल्ट रूप से वह नया एसएमएस दोबारा नहीं भेजेगा. हालांकि, आप इस व्यवहार को बदल सकते हैं forceResendingToken आर्ग्युमेंट के लिए, फिर से भेजें टोकन के साथ verifyPhoneNumber तरीके को फिर से कॉल करें. सफल होने पर, एसएमएस मैसेज फिर से भेजा जाएगा.

codeAutoRetrievalTimeout

ऐसे Android डिवाइस जो मैसेज (एसएमएस) कोड के अपने-आप रिज़ॉल्यूशन की सुविधा देते हैं, अगर डिवाइस अपने-आप नहीं होता है, तो इस हैंडलर को कॉल किया जाएगा एक तय समयसीमा में एसएमएस मैसेज का समाधान किया गया हो. समयसीमा खत्म होने के बाद, डिवाइस इस समस्या को हल करने की कोशिश नहीं करेगा कोई भी इनकमिंग संदेश.

डिफ़ॉल्ट रूप से, डिवाइस 30 सेकंड तक इंतज़ार करता है. हालांकि, इसे timeout आर्ग्युमेंट की मदद से पसंद के मुताबिक बनाया जा सकता है:

FirebaseAuth auth = FirebaseAuth.instance;

await auth.verifyPhoneNumber(
  phoneNumber: '+44 7123 123 456',
  timeout: const Duration(seconds: 60),
  codeAutoRetrievalTimeout: (String verificationId) {
    // Auto-resolution timed out...
  },
);

वेब: signInWithPhoneNumber

वेब प्लैटफ़ॉर्म पर, उपयोगकर्ता दिए गए फ़ोन नंबर पर भेजा गया एसएमएस कोड डालकर, पुष्टि कर सकते हैं कि उनके पास फ़ोन का ऐक्सेस है. इसके बाद, वे साइन-इन कर सकते हैं. ज़्यादा सुरक्षा और स्पैम से बचाव के लिए, उपयोगकर्ताओं से अनुरोध किया जाता है कि वे Google reCAPTCHA पूरा करके, इस बात की पुष्टि करें कि वे इंसान हैं विजेट. पुष्टि हो जाने पर, एसएमएस कोड भेजा जाएगा.

Flutter के लिए Firebase की पुष्टि करने वाला SDK टूल, डिफ़ॉल्ट रूप से reCAPTCHA विजेट को बॉक्स से बाहर मैनेज करेगा. हालांकि, ज़रूरत पड़ने पर इसके दिखने और कॉन्फ़िगर करने के तरीके पर कंट्रोल मिलता है. शुरू करने के लिए, फ़ोन नंबर से signInWithPhoneNumber तरीके को कॉल करें.

FirebaseAuth auth = FirebaseAuth.instance;

// Wait for the user to complete the reCAPTCHA & for an SMS code to be sent.
ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456');

इस तरीके को कॉल करने पर, सबसे पहले reCAPTCHA विजेट दिखेगा. उपयोगकर्ता को इन्हें पूरा करना होगा एसएमएस भेजे जाने से पहले जांच करें. पुष्टि होने के बाद, उपयोगकर्ता को साइन इन करने के लिए यह जानकारी दें समाधान किए गए ConfirmationResult जवाब पर confirm तरीके को एसएमएस से कोड:

UserCredential userCredential = await confirmationResult.confirm('123456');

अन्य साइन-इन फ़्लो की तरह, सही तरीके से साइन-इन करने से, पुष्टि की स्थिति लिसनर किसी भी व्यक्ति को ट्रिगर हो जाएगी आपने पूरे आवेदन के साथ सदस्यता ली हो.

reCAPTCHA कॉन्फ़िगरेशन

reCAPTCHA विजेट को पूरी तरह से मैनेज किया जाता है. इससे आपके वेब ऐप्लिकेशन को सुरक्षा मिलती है.

signInWithPhoneNumber का दूसरा आर्ग्युमेंट, एक वैकल्पिक RecaptchaVerifier इंस्टेंस स्वीकार करता है. इसका इस्तेमाल किया जा सकता है विजेट को मैनेज करने के लिए. डिफ़ॉल्ट रूप से, साइन इन फ़्लो ट्रिगर होने पर विजेट, न दिखने वाले विजेट के तौर पर दिखेगा. "न दिखने वाला" विजेट आपके ऐप्लिकेशन के सबसे ऊपर, पूरे पेज पर मॉडल के तौर पर दिखेगा.

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

इनलाइन विजेट जोड़ने के लिए, RecaptchaVerifier इंस्टेंस के container आर्ग्युमेंट में डीओएम एलिमेंट आईडी तय करें. एलिमेंट मौजूद होना चाहिए और खाली होना चाहिए, नहीं तो एक गड़बड़ी की जाएगी. अगर कोई container आर्ग्युमेंट नहीं दिया जाता है, तो विजेट को "न दिखने वाला" के तौर पर रेंडर किया जाएगा.

ConfirmationResult confirmationResult = await auth.signInWithPhoneNumber('+44 7123 123 456', RecaptchaVerifier(
  container: 'recaptcha',
  size: RecaptchaVerifierSize.compact,
  theme: RecaptchaVerifierTheme.dark,
));

ऊपर बताए गए तरीके से size और theme आर्ग्युमेंट को पसंद के मुताबिक बनाकर, साइज़ और थीम को बदला जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.

साथ ही, इवेंट की जानकारी भी पाई जा सकती है. उदाहरण के लिए, उपयोगकर्ता ने reCAPTCHA पूरा किया या नहीं reCAPTCHA की समयसीमा खत्म हो गई है या कोई गड़बड़ी हुई है:

RecaptchaVerifier(
  onSuccess: () => print('reCAPTCHA Completed!'),
  onError: (FirebaseAuthException error) => print(error),
  onExpired: () => print('reCAPTCHA Expired!'),
);

टेस्ट करना

Firebase स्थानीय तौर पर फ़ोन नंबर की जांच करने की सुविधा देता है:

  1. Firebase कंसोल पर, "फ़ोन" चुनें और "जांच के लिए फ़ोन नंबर" पर क्लिक करें ड्रॉपडाउन पर जाएं.
  2. एक नया फ़ोन नंबर (जैसे कि +44 7444 555666) और टेस्ट कोड (जैसे कि 123456) डालें.

अगर verifyPhoneNumber या signInWithPhoneNumber तरीकों से टेस्ट फ़ोन नंबर दिया जा रहा है, तो एसएमएस नहीं भेजा जाएगा. आपने लोगों तक पहुंचाया मुफ़्त में इसके बजाय, सीधे PhoneAuthProvider या signInWithPhoneNumber के पुष्टि नतीजे वाले हैंडलर को टेस्ट कोड दे सकते हैं.