यूनिटी के साथ फ़ोन नंबर का उपयोग करके फायरबेस से प्रमाणित करें

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

यह दस्तावेज़ बताता है कि Firebase SDK का उपयोग करके फ़ोन नंबर साइन-इन प्रवाह को कैसे लागू किया जाए।

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

  1. इससे पहले कि आप Firebase Authentication का उपयोग कर सकें, आपको अपने Unity प्रोजेक्ट में Firebase Unity SDK (विशेष रूप से, FirebaseAuth.unitypackage ) जोड़ना होगा।

    Add Firebase to your Unity project में इन प्रारंभिक सेटअप चरणों के लिए विस्तृत निर्देश प्राप्त करें।

  2. अगर आपने अभी तक अपने ऐप को अपने फायरबेस प्रोजेक्ट से कनेक्ट नहीं किया है, तो फायरबेस कंसोल से ऐसा करें।
  3. फ़ोन नंबर साइन-इन के लिए प्लेटफ़ॉर्म आवश्यकताओं को समझें:
    • फ़ोन नंबर साइन-इन केवल मोबाइल प्लेटफ़ॉर्म के लिए है।
    • iOS पर, फ़ोन नंबर साइन-इन के लिए एक भौतिक उपकरण की आवश्यकता होती है और यह सिम्युलेटर पर काम नहीं करेगा।

सुरक्षा चिंताएं

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

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

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

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

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

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

APN सूचनाएं प्राप्त करना प्रारंभ करें (केवल iOS)

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

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

  1. Xcode में, अपने प्रोजेक्ट के लिए पुश सूचनाएँ सक्षम करें
  2. अपने APNs प्रमाणपत्र को Firebase पर अपलोड करें। यदि आपके पास पहले से कोई APN प्रमाणपत्र नहीं है, तो Apple डेवलपर सदस्य केंद्र में एक प्रमाणपत्र बनाना सुनिश्चित करें।

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

    2. अपने विकास प्रमाण पत्र, अपने उत्पादन प्रमाण पत्र, या दोनों के लिए प्रमाणपत्र अपलोड करें बटन का चयन करें। कम से कम एक आवश्यक है।

    3. प्रत्येक प्रमाणपत्र के लिए, .p12 फ़ाइल का चयन करें, और पासवर्ड प्रदान करें, यदि कोई हो। सुनिश्चित करें कि इस प्रमाणपत्र की बंडल आईडी आपके ऐप की बंडल आईडी से मेल खाती है। सहेजें चुनें.

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

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

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

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

  2. PhoneAuthProvider.VerifyPhoneNumber पर कॉल करें, इसमें उपयोगकर्ता के फ़ोन नंबर वाले PhoneAuthOptions को पास करें।
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(
      new Firebase.Auth.PhoneAuthOptions {
        PhoneNumber = phoneNumber,
        TimeoutInMilliseconds = phoneAuthTimeoutMs,
        ForceResendingToken = null
      },
      verificationCompleted: (credential) => {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) => {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) => {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) => {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    
    जब आप PhoneAuthProvider.VerifyPhoneNumber , Firebase, को कॉल करते हैं
    • (आईओएस पर), आपके ऐप पर एक साइलेंट पुश नोटिफिकेशन भेजता है।
    • फायरबेस निर्दिष्ट फ़ोन नंबर पर एक प्रमाणीकरण कोड वाला एक एसएमएस संदेश भेजता है और आपके पूर्ण कार्य के लिए एक सत्यापन आईडी पास करता है। उपयोगकर्ता में साइन इन करने के लिए आपको सत्यापन कोड और सत्यापन आईडी दोनों की आवश्यकता होगी।
  3. सत्यापन आईडी सहेजें और जब आपका ऐप लोड हो जाए तो इसे पुनर्स्थापित करें। ऐसा करके, आप यह सुनिश्चित कर सकते हैं कि आपके पास अभी भी एक वैध सत्यापन आईडी है यदि उपयोगकर्ता द्वारा साइन-इन प्रवाह पूरा करने से पहले आपका ऐप समाप्त कर दिया गया है (उदाहरण के लिए, एसएमएस ऐप पर स्विच करते समय)।

    आप सत्यापन आईडी को किसी भी तरह से जारी रख सकते हैं। UnityEngine.PlayerPrefs के साथ सत्यापन आईडी को सहेजना एक आसान तरीका है।

यदि codeSent में पारित कॉलबैक को कॉल किया जाता है, तो आप उपयोगकर्ता को एसएमएस संदेश में सत्यापन कोड प्राप्त करने के लिए संकेत दे सकते हैं।

दूसरी ओर, यदि verificationCompleted के लिए कॉलबैक कॉल किया जाता है, तो स्वचालित सत्यापन सफल हो गया है और अब आपके पास एक PhoneAuthCredential होगा जिसके साथ आप नीचे बताए अनुसार उपयोग कर सकते हैं।

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

उपयोगकर्ता द्वारा आपके ऐप को एसएमएस संदेश से सत्यापन कोड प्रदान करने के बाद, सत्यापन कोड और सत्यापन आईडी से PhoneAuthCredential ऑब्जेक्ट बनाकर उपयोगकर्ता को साइन इन करें और उस ऑब्जेक्ट को FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync पर पास करें।

  1. उपयोगकर्ता से सत्यापन कोड प्राप्त करें।
  2. सत्यापन कोड और सत्यापन आईडी से एक Credential ऑब्जेक्ट बनाएं।
    PhoneAuthCredential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. PhoneAuthCredential ऑब्जेक्ट के साथ उपयोगकर्ता में साइन इन करें:
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result.User;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });
    

अगले कदम

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

  • अपने ऐप्लिकेशन में, आप Firebase.Auth.FirebaseUser ऑब्जेक्ट से उपयोगकर्ता की मूल प्रोफ़ाइल जानकारी प्राप्त कर सकते हैं:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • आपके फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप auth चर से साइन-इन किए गए उपयोगकर्ता की विशिष्ट उपयोगकर्ता आईडी प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।

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

उपयोगकर्ता को साइन आउट करने के लिए, SignOut() कॉल करें:

auth.SignOut();