उपयोगकर्ता को साइन इन करने के लिए, मैसेज (एसएमएस) भेजकर Firebase Authentication का इस्तेमाल किया जा सकता है उपयोगकर्ता के फ़ोन पर कॉपी कर सकते हैं. उपयोगकर्ता इसमें शामिल एक बार इस्तेमाल होने वाले कोड का इस्तेमाल करके साइन इन करता है एसएमएस मैसेज.
अपने ऐप्लिकेशन में फ़ोन नंबर साइन-इन जोड़ने का सबसे आसान तरीका यह है कि FirebaseUI, जिसमें ड्रॉप-इन साइन-इन विजेट शामिल है, जो फ़ोन के लिए साइन-इन फ़्लो लागू करता है और फ़ेडरेटेड साइन-इन के साथ-साथ पासवर्ड-आधारित और फ़ेडरेटेड साइन-इन. यह दस्तावेज़ में यह बताया गया है कि Firebase SDK टूल का इस्तेमाल करके, फ़ोन नंबर के साइन-इन फ़्लो को कैसे लागू किया जाता है.
शुरू करने से पहले
- अगर आपने अब तक ऐसा नहीं किया है, तो अपने Android प्रोजेक्ट में Firebase जोड़ें.
-
आपके मॉड्यूल (ऐप्लिकेशन-लेवल) की Gradle फ़ाइल में
(आम तौर पर
<project>/<app-module>/build.gradle.kts
या<project>/<app-module>/build.gradle
), Android के लिए Firebase Authentication लाइब्रेरी के लिए डिपेंडेंसी जोड़ें. हमारा सुझाव है कि Firebase Android BoM लाइब्रेरी के वर्शन को कंट्रोल करने के लिए.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.2.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth") }
Firebase Android BoM का इस्तेमाल करने पर, आपका ऐप्लिकेशन हमेशा Firebase Android लाइब्रेरी के साथ काम करने वाले वर्शन का इस्तेमाल करेगा.
(वैकल्पिक) BoM का इस्तेमाल करके, बिना Firebase लाइब्रेरी डिपेंडेंसी जोड़ें
अगर आपको Firebase BoM का इस्तेमाल नहीं करना है, तो आपको Firebase लाइब्रेरी का हर वर्शन बताना होगा इसकी डिपेंडेंसी लाइन में.
ध्यान दें कि अगर आप अपने ऐप्लिकेशन में कई Firebase लाइब्रेरी का इस्तेमाल करते हैं, तो हम लाइब्रेरी वर्शन को मैनेज करने के लिए, BoM का इस्तेमाल करने की सलाह दी जाती है. इससे यह पक्का होता है कि सभी वर्शन साथ काम करता है.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.0.0") }
- अगर आपने अभी तक अपने ऐप्लिकेशन को Firebase प्रोजेक्ट से कनेक्ट नहीं किया है, तो Firebase कंसोल.
- अगर आपने पहले से ही Firebase कंसोल में अपने ऐप्लिकेशन के SHA-1 हैश को सेट नहीं किया है, शामिल हैं. देखें आपके ऐप्लिकेशन के SHA-1 को ढूंढने के बारे में जानकारी पाने के लिए, अपने क्लाइंट की पुष्टि करना हैश.
सुरक्षा से जुड़ी समस्याएं
सिर्फ़ फ़ोन नंबर से पुष्टि करना, हालांकि सुविधाजनक होता है कि यह कम सुरक्षित है अन्य उपलब्ध तरीकों की तुलना में ज़्यादा हो सकता है, क्योंकि आपके पास फ़ोन नंबर होना चाहिए इसे उपयोगकर्ताओं के बीच आसानी से ट्रांसफ़र किया जा सकता है. साथ ही, कई उपयोगकर्ताओं वाले डिवाइसों पर प्रोफ़ाइल हैं, तो SMS संदेश प्राप्त कर सकने वाला कोई भी उपयोगकर्ता इसका उपयोग करके खाते में प्रवेश कर सकता है डिवाइस का फ़ोन नंबर डालें.
अगर ऐप्लिकेशन में फ़ोन नंबर के ज़रिए साइन इन करने की सुविधा का इस्तेमाल किया जाता है, तो आपको यह ऑफ़र देना चाहिए और साइन-इन करने के ज़्यादा सुरक्षित तरीकों के बारे में जानकारी मिलेगी. फ़ोन नंबर से साइन-इन न करने पर हो सकता है.
अपने Firebase प्रोजेक्ट के लिए, फ़ोन नंबर से साइन-इन करने की सुविधा चालू करना
उपयोगकर्ताओं को एसएमएस से साइन इन करने के लिए, पहले आपको फ़ोन नंबर के ज़रिए साइन इन करने की सुविधा चालू करनी होगी इस तरीके का इस्तेमाल करें:
- Firebase कंसोल में, पुष्टि करना सेक्शन खोलें.
- साइन इन करने का तरीका पेज पर, फ़ोन नंबर चालू करें साइन-इन करने का तरीका.
ऐप्लिकेशन की पुष्टि करने की सुविधा चालू करें
फ़ोन नंबर की पुष्टि करने की सुविधा का इस्तेमाल करने के लिए, Firebase को यह पुष्टि करनी होगी कि फ़ोन नंबर से साइन-इन करने के अनुरोध, आपके ऐप्लिकेशन से किए जा रहे हैं. ऐसा करने के तीन तरीके हैं Firebase Authentication ने यह लक्ष्य पूरा किया:
- Play Integrity API: अगर किसी उपयोगकर्ता के पास ऐसा डिवाइस है जिसमें Google Play services इंस्टॉल है,
और Firebase Authentication यह पुष्टि कर सकता है कि डिवाइस
Play Integrity API,
फ़ोन नंबर से साइन-इन किया जा सकता है. Play Integrity API को Google के मालिकाना हक वाले प्रोजेक्ट के लिए,
Firebase Authentication, आपके प्रोजेक्ट पर नहीं है. इससे किसी भी Play Integrity API में योगदान नहीं मिलता
कोटा की सीमा तय की है. Play Integrity सहायता, इनके साथ उपलब्ध है:
Authentication SDK टूल v21.2.0+
(Firebase BoM वर्शन 31.4.0 के बाद का वर्शन).
अगर आपने अब तक अपने ऐप्लिकेशन के SHA-256 फ़िंगरप्रिंट की जानकारी नहीं दी है, तो Play Integrity का इस्तेमाल करने के लिए ऐसा करें से प्रोजेक्ट Firebase कंसोल की सेटिंग में बदलाव करें. इससे संदर्भ लें अपने क्लाइंट देखें, ताकि आपको अपने ऐप्लिकेशन का SHA-256 फ़िंगरप्रिंट पाने का तरीका पता चल सके.
- re कैप्चा की पुष्टि करना: अगर Play Integrity का इस्तेमाल नहीं किया जा सकता, तो
जैसे, उपयोगकर्ता के पास ऐसा डिवाइस है जिस पर Google Play services इंस्टॉल नहीं है, Firebase Authentication
फ़ोन से साइन इन की प्रक्रिया को पूरा करने के लिए, reCAPTCHA की पुष्टि का इस्तेमाल करता है. reCAPTCHA चुनौती से ये काम किए जा सकते हैं
यह प्रक्रिया पूरी करने के लिए, उपयोगकर्ता को किसी समस्या का हल करने की ज़रूरत नहीं होती. ध्यान दें कि इस फ़्लो के लिए ज़रूरी है कि
एक SHA-1 आपके ऐप्लिकेशन से जुड़ा हुआ है. इस फ़्लो के लिए यह भी ज़रूरी है कि आपकी एपीआई पासकोड
PROJECT_ID.firebaseapp.com
के लिए, पाबंदी या अनुमति वाली सूची में शामिल है.कुछ मामलों में reCAPTCHA ट्रिगर होता है:
- अगर असली उपयोगकर्ता के डिवाइस में Google Play services इंस्टॉल नहीं है.
- अगर ऐप्लिकेशन को Google Play Store (Authentication SDK टूल v21.2.0+ पर) की मदद से डिस्ट्रिब्यूट नहीं किया गया है.
- अगर मिला SafetyNet टोकन मान्य नहीं था (Authentication SDK टूल के वर्शन < v21.2.0 पर).
जब ऐप्लिकेशन की पुष्टि करने के लिए SafetyNet या Play Integrity का इस्तेमाल किया जाता है, तो एसएमएस टेंप्लेट में मौजूद
%APP_NAME%
फ़ील्ड में, Google Play Store से तय किए गए ऐप्लिकेशन के नाम की जानकारी अपने-आप भर जाती है. reCAPTCHA के ट्रिगर होने पर,%APP_NAME%
की जानकारीPROJECT_ID.firebaseapp.com
के तौर पर अपने-आप भर जाती है.
forceRecaptchaFlowForTesting
आप इनका उपयोग करके ऐप्लिकेशन सत्यापन (काल्पनिक फ़ोन नंबर का उपयोग करते समय) को अक्षम कर सकते हैं
setAppVerificationDisabledForTesting
.
समस्या का हल
"शुरुआती स्थिति मौजूद नहीं है" ऐप्लिकेशन की पुष्टि के लिए reCAPTCHA का इस्तेमाल करते समय गड़बड़ी हुई
ऐसा तब हो सकता है, जब reCAPTCHA फ़्लो पूरा हो जाता है, लेकिन उपयोगकर्ता को स्थानीय ऐप्लिकेशन पर वापस रीडायरेक्ट नहीं किया जाता. अगर ऐसा होता है, तो उपयोगकर्ता को फ़ॉलबैक यूआरएल
PROJECT_ID.firebaseapp.com/__/auth/handler
पर रीडायरेक्ट कर दिया जाता है. Firefox ब्राउज़र पर, खास ऐप्लिकेशन लिंक खोलने की सुविधा डिफ़ॉल्ट रूप से बंद रहती है. अगर आपको Firefox पर ऊपर दी गई गड़बड़ी दिखती है, तो ऐप्लिकेशन लिंक खोलना चालू करने के लिए, Android के लिए Firefox को खास ऐप्लिकेशन में लिंक खोलने के लिए सेट करें में दिया गया तरीका अपनाएं.
उपयोगकर्ता के फ़ोन पर पुष्टि करने के लिए कोड भेजें
फ़ोन नंबर से साइन-इन करने के लिए, उपयोगकर्ता को ऐसा इंटरफ़ेस दिखाएं जो प्रॉम्प्ट देता हो ताकि वे अपना फ़ोन नंबर लिख सकें. कानूनी समझौते की शर्तें अलग-अलग हो सकती हैं, लेकिन ये सबसे सही तरीके हैं और अपने उपयोगकर्ताओं के लिए उम्मीदें सेट करने के लिए, आपको उन्हें यह बताना होगा कि अगर वे फ़ोन से प्रवेश करते हैं, तो उन्हें एक एसएमएस संदेश मिल सकता है, दरें लागू होंगी.
फिर, उनका फ़ोन नंबर
Firebase का अनुरोध करने के लिए PhoneAuthProvider.verifyPhoneNumber
तरीका
उपयोगकर्ता के फ़ोन नंबर की पुष्टि करें. उदाहरण के लिए:
Kotlin+KTX
val options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // Activity (for callback binding) .setCallbacks(callbacks) // OnVerificationStateChangedCallbacks .build() PhoneAuthProvider.verifyPhoneNumber(options)
Java
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // (optional) Activity for callback binding // If no activity is passed, reCAPTCHA verification can not be used. .setCallbacks(mCallbacks) // OnVerificationStateChangedCallbacks .build(); PhoneAuthProvider.verifyPhoneNumber(options);
verifyPhoneNumber
तरीका फिर से इस्तेमाल किया गया है: इसे कॉल करने पर
एक से ज़्यादा बार भेजा जाता है, जैसे कि किसी गतिविधि के onStart
तरीके में,
verifyPhoneNumber
तरीका तब तक दूसरा एसएमएस नहीं भेजेगा, जब तक
मूल अनुरोध का समय खत्म हो गया है.
इस तरीके का इस्तेमाल करके, फ़ोन नंबर में साइन इन करने की प्रोसेस फिर से शुरू की जा सकती है, अगर
उपयोगकर्ता के साइन इन करने से पहले ऐप्लिकेशन बंद हो जाता है (उदाहरण के लिए, जब उपयोगकर्ता इस्तेमाल कर रहा हो
एसएमएस ऐप्लिकेशन खोलें). verifyPhoneNumber
को कॉल करने के बाद, वह फ़्लैग सेट करें
से पता चलता है कि पुष्टि की जा रही है. इसके बाद, इस फ़्लैग को अपनी ऐक्टिविटी के
onSaveInstanceState
तरीका अपनाएं और फ़्लैग को पहले जैसा करें
onRestoreInstanceState
. आख़िर में, आपकी ऐक्टिविटी
onStart
तरीका इस्तेमाल करके, देखें कि क्या पुष्टि की प्रक्रिया पहले से चल रही है, और
अगर हां, तो verifyPhoneNumber
पर फिर से कॉल करें. फ़्लैग को साफ़ करना ज़रूरी है
सत्यापन पूरा या विफल होता है (देखें
पुष्टि के लिए कॉलबैक).
स्क्रीन को घुमाने और ऐक्टिविटी के रीस्टार्ट होने के अन्य मामलों को आसानी से मैनेज करने के लिए,
अपनी गतिविधि को verifyPhoneNumber
तरीके में पास करें. कॉलबैक
गतिविधि बंद होने पर, डेटा अपने-आप डिसकनेक्ट हो जाएगा, ताकि आप यूज़र इंटरफ़ेस (यूआई) को आसानी से लिख सकें
ट्रांज़िशन कोड का इस्तेमाल करना होगा.
Firebase से भेजे जाने वाले मैसेज को स्थानीय भाषा में भी भेजा जा सकता है. इसके लिए,
आपके ऑथराइज़ेशन पर, setLanguageCode
तरीके के ज़रिए प्रामाणिक भाषा
इंस्टेंस.
Kotlin+KTX
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
PhoneAuthProvider.verifyPhoneNumber
को कॉल करते समय, आपको ये बातें भी ध्यान में रखनी होंगी
OnVerificationStateChangedCallbacks
का एक इंस्टेंस दें, जो
इसमें कॉलबैक फ़ंक्शन को लागू किया जाता है, जो
अनुरोध किया है. उदाहरण के लिए:
Kotlin+KTX
callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onVerificationCompleted(credential: PhoneAuthCredential) { // This callback will be invoked in two situations: // 1 - Instant verification. In some cases the phone number can be instantly // verified without needing to send or enter a verification code. // 2 - Auto-retrieval. On some devices Google Play services can automatically // detect the incoming verification SMS and perform verification without // user action. Log.d(TAG, "onVerificationCompleted:$credential") signInWithPhoneAuthCredential(credential) } override fun onVerificationFailed(e: FirebaseException) { // This callback is invoked in an invalid request for verification is made, // for instance if the the phone number format is not valid. Log.w(TAG, "onVerificationFailed", e) if (e is FirebaseAuthInvalidCredentialsException) { // Invalid request } else if (e is FirebaseTooManyRequestsException) { // The SMS quota for the project has been exceeded } else if (e is FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // Show a message and update the UI } override fun onCodeSent( verificationId: String, token: PhoneAuthProvider.ForceResendingToken, ) { // The SMS verification code has been sent to the provided phone number, we // now need to ask the user to enter the code and then construct a credential // by combining the code with a verification ID. Log.d(TAG, "onCodeSent:$verificationId") // Save verification ID and resending token so we can use them later storedVerificationId = verificationId resendToken = token } }
Java
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) { // This callback will be invoked in two situations: // 1 - Instant verification. In some cases the phone number can be instantly // verified without needing to send or enter a verification code. // 2 - Auto-retrieval. On some devices Google Play services can automatically // detect the incoming verification SMS and perform verification without // user action. Log.d(TAG, "onVerificationCompleted:" + credential); signInWithPhoneAuthCredential(credential); } @Override public void onVerificationFailed(@NonNull FirebaseException e) { // This callback is invoked in an invalid request for verification is made, // for instance if the the phone number format is not valid. Log.w(TAG, "onVerificationFailed", e); if (e instanceof FirebaseAuthInvalidCredentialsException) { // Invalid request } else if (e instanceof FirebaseTooManyRequestsException) { // The SMS quota for the project has been exceeded } else if (e instanceof FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // Show a message and update the UI } @Override public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken token) { // The SMS verification code has been sent to the provided phone number, we // now need to ask the user to enter the code and then construct a credential // by combining the code with a verification ID. Log.d(TAG, "onCodeSent:" + verificationId); // Save verification ID and resending token so we can use them later mVerificationId = verificationId; mResendToken = token; } };
पुष्टि कॉलबैक
ज़्यादातर ऐप्लिकेशन में आप onVerificationCompleted
लागू करते हैं,
onVerificationFailed
और onCodeSent
कॉलबैक. आपने लोगों तक पहुंचाया मुफ़्त में
आपकी नीति के आधार पर, onCodeAutoRetrievalTimeOut
को भी लागू कर सकता है
ज़रूरी शर्तें.
पुष्टि की प्रोसेस पूरी हुई(PhoneAuthCredential)
इस तरीके को दो स्थितियों में कॉल किया जाता है:
- तुरंत पुष्टि: कुछ मामलों में फ़ोन नंबर तुरंत इस्तेमाल किया जा सकता है पुष्टि करने के लिए, पुष्टि करने के लिए कोड भेजने या डालने की ज़रूरत नहीं होती.
- अपने-आप डेटा वापस पाने की सुविधा: कुछ डिवाइसों पर, Google Play services ये काम कर सकती है पुष्टि करने के लिए आने वाले एसएमएस का अपने-आप पता लगाकर, उन्हें अपने-आप उपयोगकर्ता की कार्रवाई के बिना पुष्टि की जा सकती है. (यह सुविधा शायद उपलब्ध न हो मोबाइल और इंटरनेट सेवा देने वाली कुछ कंपनियां हैं.) यह एसएमएस रिट्रीवर एपीआई, जो कि एसएमएस मैसेज के आखिर में 11 वर्ण का हैश शामिल होता है.
PhoneAuthCredential
ऑब्जेक्ट का उपयोग कर सकते हैं, जो
उपयोगकर्ता को साइन इन करने के लिए कॉलबैक करें.
onपुष्टि करने में कोई गड़बड़ी नहीं होती(Firebaseअपवाद)
इस तरीके का इस्तेमाल, पुष्टि करने के किसी अमान्य अनुरोध के जवाब में किया जाता है. जैसे किसी अमान्य फ़ोन नंबर या पुष्टि कोड के बारे में बताने वाले अनुरोध के रूप में.
onCodeSent(String verificationId, PhoneAuthProvider.Forceस्तरingToken)
ज़रूरी नहीं. पुष्टि करने का कोड भेजे जाने के बाद, इस तरीके को कॉल किया जाता है दिए गए फ़ोन नंबर पर एसएमएस भेजकर.
इस तरीके को कॉल करने पर, ज़्यादातर ऐप्लिकेशन में यूज़र इंटरफ़ेस (यूआई) दिखता है. इस यूज़र इंटरफ़ेस (यूआई) में,
का इस्तेमाल करें. (साथ ही,
अगर अपने-आप पुष्टि हो रही है, तो हो सकता है कि बैकग्राउंड में काम चल रहा हो.) इसके बाद, उपयोगकर्ता के बाद
पुष्टि करने का कोड टाइप करता है, तो आप पुष्टि करने के लिए कोड का इस्तेमाल कर सकते हैं और
वह आईडी जिसे
PhoneAuthCredential
ऑब्जेक्ट, जिसका इस्तेमाल साइन इन करने के लिए किया जा सकता है
उपयोगकर्ता है. हालांकि, कुछ ऐप्लिकेशन इस तारीख तक इंतज़ार कर सकते हैं
स्क्रीन के निचले हिस्से में रखने के लिए, onCodeAutoRetrievalTimeOut
पुष्टि करने के लिए कोड का यूज़र इंटरफ़ेस (यूआई) (हम इसका सुझाव नहीं देते).
onCodeAutoRetrievalTimeOut(स्ट्रिंग की पुष्टि करने वाला आईडी)
ज़रूरी नहीं. यह विधि
verifyPhoneNumber
बिना पास के निकल गया
सबसे पहले onVerificationCompleted
ट्रिगर हुआ. बिना सिम वाले डिवाइसों पर
कार्ड दिखाई देता है, तो इस तरीके को तुरंत कॉल किया जाता है, क्योंकि मैसेज (एसएमएस) अपने-आप वापस पाने की सुविधा
किया जा सकता है.
कुछ ऐप्लिकेशन, अपने-आप पुष्टि होने की अवधि खत्म होने तक उपयोगकर्ता के इनपुट को ब्लॉक कर देते हैं, इसके बाद, उपयोगकर्ता को वह यूज़र इंटरफ़ेस (यूआई) दिखेगा जिसमें पुष्टि करने के लिए कोड टाइप करने के लिए कहा जाएगा एसएमएस मैसेज से मिला हो (हम इसका सुझाव नहीं देते).
PhoneAuthक्रेडेंशियल ऑब्जेक्ट बनाएं
जब उपयोगकर्ता, पुष्टि करने वाला वह कोड डालता है जिसे Firebase ने उपयोगकर्ता के
फ़ोन, पुष्टि का इस्तेमाल करके PhoneAuthCredential
ऑब्जेक्ट बनाएं
कोड और पुष्टि आईडी जो onCodeSent
को भेजा गया था या
onCodeAutoRetrievalTimeOut
कॉलबैक. (कब
onVerificationCompleted
को कॉल किया गया है, आपको मिला है
PhoneAuthCredential
ऑब्जेक्ट सीधे तौर पर अपलोड करें, ताकि आप इस चरण को छोड़ सकें.)
PhoneAuthCredential
ऑब्जेक्ट बनाने के लिए, कॉल करें
PhoneAuthProvider.getCredential
:
Kotlin+KTX
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
उपयोगकर्ता के तौर पर साइन इन करें
PhoneAuthCredential
ऑब्जेक्ट मिलने के बाद, चाहे
onVerificationCompleted
कॉलबैक या कॉल करके
PhoneAuthProvider.getCredential
, इस तारीख तक साइन इन की प्रक्रिया पूरी करें
PhoneAuthCredential
ऑब्जेक्ट को पास किया जा रहा है
FirebaseAuth.signInWithCredential
:
Kotlin+KTX
private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) { auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = task.result?.user } else { // Sign in failed, display a message and update the UI Log.w(TAG, "signInWithCredential:failure", task.exception) if (task.exception is FirebaseAuthInvalidCredentialsException) { // The verification code entered was invalid } // Update UI } } }
Java
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) { mAuth.signInWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = task.getResult().getUser(); // Update UI } else { // Sign in failed, display a message and update the UI Log.w(TAG, "signInWithCredential:failure", task.getException()); if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) { // The verification code entered was invalid } } } }); }
काल्पनिक फ़ोन नंबर के साथ परीक्षण करें
Firebase कंसोल के ज़रिए, डेवलपमेंट के लिए काल्पनिक फ़ोन नंबर सेट अप किए जा सकते हैं. काल्पनिक फ़ोन से टेस्ट करना संख्याओं से ये फ़ायदे मिलते हैं:
- इस्तेमाल करने का कोटा खर्च किए बिना, फ़ोन नंबर की पुष्टि करने की सुविधा की जांच करें.
- वास्तविक एसएमएस मैसेज भेजे बिना ही फ़ोन नंबर की पुष्टि करके देखें.
- थ्रॉटल किए बिना, एक ही फ़ोन नंबर से लगातार टेस्ट करें. यह अगर समीक्षक Play Store की समीक्षा की प्रोसेस के दौरान, जांच करने के लिए एक ही फ़ोन नंबर.
- बिना किसी अतिरिक्त प्रयास के विकास वातावरण में आसानी से परीक्षण करें, जैसे Google Play services के बिना, iOS सिम्युलेटर या Android एम्युलेटर में डेवलप करने की सुविधा.
- आम तौर पर लागू होने वाली सुरक्षा जांचों से रोके बिना इंटिग्रेशन टेस्ट लिखें फ़ोन नंबर इस्तेमाल करने की सुविधा देती है.
काल्पनिक फ़ोन नंबर इन शर्तों के मुताबिक होने चाहिए:
- पक्का करें कि आप ऐसे फ़ोन नंबर इस्तेमाल करें जो असल में काल्पनिक हैं और जो पहले से मौजूद नहीं हैं. Firebase Authentication आपको उन मौजूदा फ़ोन नंबरों को टेस्ट नंबर के रूप में सेट करने की अनुमति नहीं देता है, जिनका इस्तेमाल वास्तविक उपयोगकर्ता करते हैं. अमेरिका के टेस्ट फ़ोन नंबर के तौर पर, 555 प्रीफ़िक्स नंबर का इस्तेमाल किया जा सकता है. उदाहरण के लिए: +1 650-555-3434
- फ़ोन नंबर लंबाई और अन्य चीज़ों के लिए सही ढंग से प्रारूपित होने चाहिए करना है. उन्हें अब भी उसी तरह से पुष्टि की जाएगी जिस तरह किसी असली उपयोगकर्ता के फ़ोन नंबर की पुष्टि की जाती है.
- डेवलपमेंट के लिए, ज़्यादा से ज़्यादा 10 फ़ोन नंबर जोड़े जा सकते हैं.
- ऐसे टेस्ट फ़ोन नंबर/कोड का इस्तेमाल करें जिनका अनुमान लगाना और उन्हें बदलना मुश्किल हो अक्सर.
काल्पनिक फ़ोन नंबर और पुष्टि करने के लिए कोड बनाएं
- Firebase कंसोल में, खोलें पुष्टि करना सेक्शन.
- साइन इन करने का तरीका टैब में, अगर आपने पहले से फ़ोन की सेवा देने वाली कंपनी को चालू नहीं किया है, तो उसे चालू करें.
- टेस्टिंग के लिए फ़ोन नंबर अकॉर्डियन मेन्यू खोलें.
- वह फ़ोन नंबर दें जिसकी आपको जांच करनी है. उदाहरण के लिए: +1 650-555-3434.
- उस खास नंबर के लिए छह अंकों का पुष्टि करने वाला कोड दें, जैसे कि: 654321.
- नंबर जोड़ें. अगर ज़रूरत हो, तो आप फ़ोन नंबर मिटा सकते हैं और इसके लिए, उससे जुड़ी लाइन पर कर्सर घुमाएं और ट्रैश आइकॉन पर क्लिक करें.
मैन्युअल तरीके से जांच करने की सुविधा
अपने ऐप्लिकेशन में, किसी काल्पनिक फ़ोन नंबर का इस्तेमाल सीधे तौर पर शुरू किया जा सकता है. इसकी मदद से, कोटा की समस्याओं या थ्रॉटलिंग से जुड़ी समस्या के बिना, डेवलपमेंट के चरणों के दौरान मैन्युअल तरीके से जांच करेगा. Google Play services के बिना भी, iOS सिम्युलेटर या Android Emulator से भी डिवाइस की जांच की जा सकती है इंस्टॉल किया गया.
जब आप काल्पनिक फ़ोन नंबर देते हैं और पुष्टि कोड भेजते हैं, तो कोई असल मैसेज (एसएमएस) नहीं भेजा जाता भेजा गया. इसके बजाय, साइन इन करने के लिए, आपको पहले से कॉन्फ़िगर किया गया पुष्टि करने वाला कोड देना होगा इंच
साइन-इन पूरा होने पर, उस फ़ोन नंबर से एक Firebase उपयोगकर्ता बन जाता है. कॉन्टेंट बनाने उपयोगकर्ता का व्यवहार और प्रॉपर्टी किसी वास्तविक फ़ोन नंबर उपयोगकर्ता की तरह ही होती हैं और Realtime Database/Cloud Firestore और अन्य सेवाएं इसी तरह से काम करती हैं. के दौरान बनाया गया आईडी टोकन इस प्रोसेस में फ़ोन नंबर इस्तेमाल करने वाले असली उपयोगकर्ता के हस्ताक्षर एक जैसे हैं.
दूसरा विकल्प यह है कि कस्टम यूआरएल के ज़रिए टेस्ट भूमिका सेट की जाए दावों का इस्तेमाल करके उन्हें नकली उपयोगकर्ताओं के तौर पर पेश किया जा सकता है. ऐसा तब ही किया जा सकता है, जब आपको ऐक्सेस दें.
जांच के लिए, reCAPTCHA फ़्लो को मैन्युअल तरीके से ट्रिगर करने के लिए,
forceRecaptchaFlowForTesting()
तरीका.
// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
इंटिग्रेशन की जांच करना
मैन्युअल तरीके से टेस्ट करने के अलावा, Firebase Authentication, इंटिग्रेशन टेस्ट लिखने में मदद करने के लिए एपीआई उपलब्ध कराता है फ़ोन की पुष्टि की जांच के लिए. ये एपीआई, reCAPTCHA को बंद करके ऐप्लिकेशन की पुष्टि की सुविधा को बंद कर देते हैं iOS में, वेब और साइलेंट पुश नोटिफ़िकेशन की ज़रूरत होती है. इससे इन सेवाओं में ऑटोमेशन की जांच की जा सकती है साथ ही, इन्हें आसानी से लागू किया जा सकता है. इसके अलावा, वे तुरंत जांच करने की सुविधा देते हैं पुष्टि करने की प्रक्रिया को Android पर पूरा करना ज़रूरी है.
Android पर, setAppVerificationDisabledForTesting()
signInWithPhoneNumber
कॉल. यह ऐप्लिकेशन की पुष्टि करने की सुविधा को अपने-आप बंद कर देता है.
इससे फ़ोन नंबर को मैन्युअल तरीके से हल किए बिना उसे पास किया जा सकता है. हालांकि,
Play Integrity और reCAPTCHA की सुविधा बंद है. किसी असली फ़ोन नंबर का इस्तेमाल करने पर भी,
साइन इन पूरा करें. इस एपीआई के साथ सिर्फ़ काल्पनिक फ़ोन नंबर इस्तेमाल किए जा सकते हैं.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
verifyPhoneNumber
को किसी काल्पनिक नंबर के साथ कॉल करने से
onCodeSent
कॉलबैक, जिसमें आपको इससे जुड़ी पुष्टि की जानकारी देनी होगी
कोड. इससे Android एम्युलेटर में ऐप्लिकेशन को टेस्ट करने की अनुमति मिलती है.
Java
String phoneNum = "+16505554567"; String testVerificationCode = "123456"; // Whenever verification is triggered with the whitelisted number, // provided it is not set for auto-retrieval, onCodeSent will be triggered. FirebaseAuth auth = FirebaseAuth.getInstance(); PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth) .setPhoneNumber(phoneNum) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) { // Save the verification id somewhere // ... // The corresponding whitelisted code above should be used to complete sign-in. MainActivity.this.enableUserManuallyInputCode(); } @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) { // Sign in with the credential // ... } @Override public void onVerificationFailed(@NonNull FirebaseException e) { // ... } }) .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Kotlin+KTX
val phoneNum = "+16505554567" val testVerificationCode = "123456" // Whenever verification is triggered with the whitelisted number, // provided it is not set for auto-retrieval, onCodeSent will be triggered. val options = PhoneAuthOptions.newBuilder(Firebase.auth) .setPhoneNumber(phoneNum) .setTimeout(30L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onCodeSent( verificationId: String, forceResendingToken: PhoneAuthProvider.ForceResendingToken, ) { // Save the verification id somewhere // ... // The corresponding whitelisted code above should be used to complete sign-in. this@MainActivity.enableUserManuallyInputCode() } override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) { // Sign in with the credential // ... } override fun onVerificationFailed(e: FirebaseException) { // ... } }) .build() PhoneAuthProvider.verifyPhoneNumber(options)
इसके अलावा, काल्पनिक संख्या सेट करके और
कॉल करके अपने-आप वापस पाने के लिए, पुष्टि करने वाला कोड
setAutoRetrievedSmsCodeForPhoneNumber
.
जब verifyPhoneNumber
होता है
कॉल किया जाता है, तो यह PhoneAuthCredential
के साथ onVerificationCompleted
को ट्रिगर करता है
सकता है. यह सुविधा सिर्फ़ काल्पनिक फ़ोन नंबर के साथ काम करती है.
पक्का करें कि यह बंद है और किसी काल्पनिक फ़ोन नंबर को हार्डकोड नहीं किया गया है Google Play Store में अपना ऐप्लिकेशन प्रकाशित करते समय आपके ऐप्लिकेशन को.
Java
// The test phone number and code should be whitelisted in the console. String phoneNumber = "+16505554567"; String smsCode = "123456"; FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(); FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings(); // Configure faking the auto-retrieval with the whitelisted numbers. firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode); PhoneAuthOptions options = PhoneAuthOptions.newBuilder(firebaseAuth) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) { // Instant verification is applied and a credential is directly returned. // ... } // ... }) .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Kotlin+KTX
// The test phone number and code should be whitelisted in the console. val phoneNumber = "+16505554567" val smsCode = "123456" val firebaseAuth = Firebase.auth val firebaseAuthSettings = firebaseAuth.firebaseAuthSettings // Configure faking the auto-retrieval with the whitelisted numbers. firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode) val options = PhoneAuthOptions.newBuilder(firebaseAuth) .setPhoneNumber(phoneNumber) .setTimeout(60L, TimeUnit.SECONDS) .setActivity(this) .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() { override fun onVerificationCompleted(credential: PhoneAuthCredential) { // Instant verification is applied and a credential is directly returned. // ... } // ... }) .build() PhoneAuthProvider.verifyPhoneNumber(options)
अगले चरण
किसी उपयोगकर्ता के पहली बार साइन इन करने के बाद, एक नया उपयोगकर्ता खाता बना दिया जाता है और आपके खाते के क्रेडेंशियल मौजूद हैं, जैसे कि उपयोगकर्ता नाम और पासवर्ड, या पुष्टि करने वाली कंपनी की जानकारी—उपयोगकर्ता ने जिससे साइन इन किया है. यह नया खाते को आपके Firebase प्रोजेक्ट के हिस्से के तौर पर सेव किया जाता है. साथ ही, इसका इस्तेमाल आपके प्रोजेक्ट के हर ऐप्लिकेशन में हर उपयोगकर्ता के लिए उपलब्ध होता है. भले ही, उपयोगकर्ता किसी भी तरह से साइन इन करता हो.
-
अपने ऐप्लिकेशन में, उपयोगकर्ता की बुनियादी प्रोफ़ाइल जानकारी को
FirebaseUser
ऑब्जेक्ट. देखें उपयोगकर्ताओं को मैनेज करना. आपके Firebase Realtime Database और Cloud Storage में सुरक्षा के नियम, ये काम किए जा सकते हैं
auth
वैरिएबल से साइन-इन किए हुए उपयोगकर्ता का यूनीक यूज़र आईडी पाएं, और इसका इस्तेमाल करके यह कंट्रोल किया जा सकता है कि उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.
उपयोगकर्ताओं को, पुष्टि करने के एक से ज़्यादा तरीके का इस्तेमाल करके, अपने ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है पुष्टि करने वाले के क्रेडेंशियल जोड़कर मौजूदा उपयोगकर्ता खाते से लिंक किया जा सकता है.
उपयोगकर्ता को साइन आउट करने के लिए पर कॉल करें
signOut
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();