Unity के साथ फ़ोन नंबर का इस्तेमाल करके Firebase से पुष्टि करें

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

इस दस्तावेज़ में, Firebase SDK का इस्तेमाल करके, फ़ोन नंबर से साइन इन करने की प्रोसेस लागू करने का तरीका बताया गया है.

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

  1. Firebase Authentication का इस्तेमाल करने से पहले, आपको अपने Unity प्रोजेक्ट में Firebase Unity SDK (खास तौर पर, `FirebaseAuth.unitypackage`) जोड़ना होगा.Firebase AuthenticationFirebaseUnityFirebaseAuth.unitypackage

    सेटअप के शुरुआती चरणों के बारे में ज़्यादा जानकारी पाने के लिए, अपने Unity प्रोजेक्ट में Firebase जोड़ना लेख पढ़ें.

  2. अगर आपने अपने ऐप्लिकेशन को अब तक Firebase प्रोजेक्ट से कनेक्ट नहीं किया है, तो Firebase कंसोल से कनेक्ट करें.
  3. फ़ोन नंबर से साइन इन करने के लिए, प्लैटफ़ॉर्म की ज़रूरी शर्तें समझें:
    • फ़ोन नंबर से साइन इन करने की सुविधा सिर्फ़ मोबाइल प्लैटफ़ॉर्म के लिए है.
    • iOS पर, फ़ोन नंबर से साइन इन करने के लिए किसी असली डिवाइस की ज़रूरत होती है. यह सिम्युलेटर पर काम नहीं करेगा.

सुरक्षा से जुड़ी चिंताएं

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

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

अपने Firebase प्रोजेक्ट के लिए, फ़ोन नंबर से साइन इन करने की सुविधा चालू करना

एसएमएस की मदद से उपयोगकर्ताओं को साइन इन कराने के लिए, आपको सबसे पहले अपने Firebase प्रोजेक्ट के लिए, फ़ोन नंबर से साइन इन करने का तरीका चालू करना होगा:

  1. Firebase कंसोल में, सुरक्षा > पुष्टि पर जाएं.
  2. साइन इन करने का तरीका टैब में, फ़ोन से साइन इन करने की सुविधा चालू करें.
  3. उन इलाकों के लिए नीति सेट करें जहां आपको एसएमएस भेजने की अनुमति देनी है या नहीं देनी है एसएमएस के लिए इलाके की नीति सेट करने से, आपके ऐप्लिकेशन को एसएमएस के गलत इस्तेमाल से बचाने में मदद मिल सकती है. नए प्रोजेक्ट के लिए, डिफ़ॉल्ट नीति के तहत किसी भी इलाके में एसएमएस भेजने की अनुमति नहीं होती.
    1. Firebase कंसोल में, सुरक्षा > पुष्टि > सेटिंग टैब पर जाएं.
    2. एसएमएस के लिए इलाके की नीति सेक्शन में, एसएमएस के लिए इलाके की नीति सेट अप करें.

एपीएनएस सूचनाएं पाना शुरू करना (सिर्फ़ iOS के लिए)

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

Firebase Authentication के साथ इस्तेमाल करने के लिए, एपीएनएस सूचनाएं चालू करने के लिए:

  1. Xcode में, अपने प्रोजेक्ट के लिए पुश नोटिफ़िकेशन चालू करें.
  2. अपना एपीएनएस सर्टिफ़िकेट, Firebase पर अपलोड करें. अगर आपके पास पहले से एपीएनएस सर्टिफ़िकेट नहीं है, तो Apple Developer Member Center में जाकर एक सर्टिफ़िकेट बनाएं.

    1. Firebase कंसोल में, सेटिंग पर जाएं सेटिंग > सामान्य. इसके बाद, Cloud Messaging टैब पर क्लिक करें.
    2. डेवलपमेंट सर्टिफ़िकेट, आपके प्रोडक्शन सर्टिफ़िकेट या दोनों के लिए, सर्टिफ़िकेट अपलोड करें पर क्लिक करें. इनमें से कम से कम एक सर्टिफ़िकेट होना ज़रूरी है.
    3. हर सर्टिफ़िकेट के लिए, .p12 फ़ाइल चुनें. साथ ही, अगर कोई पासवर्ड है, तो उसे डालें. पक्का करें कि इस सर्टिफ़िकेट का बंडल आईडी, आपके ऐप्लिकेशन के बंडल आईडी से मेल खाता हो. सेव करें पर क्लिक करें.

उपयोगकर्ता के फ़ोन पर पुष्टि करने के लिए कोड भेजना

फ़ोन नंबर से साइन इन करने की प्रोसेस शुरू करने के लिए, उपयोगकर्ता को एक ऐसा इंटरफ़ेस दिखाएं जिसमें उससे अपना फ़ोन नंबर देने के लिए कहा जाए. इसके बाद, Firebase से अनुरोध करें कि वह उपयोगकर्ता के फ़ोन पर एसएमएस के ज़रिए पुष्टि करने के लिए कोड भेजे. इसके लिए, PhoneAuthProvider.VerifyPhoneNumber को कॉल करें:

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

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

  2. PhoneAuthProvider.VerifyPhoneNumber को कॉल करें. साथ ही, इसमें उपयोगकर्ता का फ़ोन नंबर शामिल करने वाला PhoneAuthOptions पास करें.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(
      new Firebase.Auth.PhoneAuthOptions {
        PhoneNumber = phoneNumber,
        TimeoutInMilliseconds = phoneAuthTimeoutMs,
        ForceResendingToken = null
      },
      verificationCompleted: (credential) =&gt {
        // 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) =&gt {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) =&gt {
        // 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) =&gt {
        // 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,
    • (iOS पर), आपके ऐप्लिकेशन पर एक साइलेंट पुश नोटिफ़िकेशन भेजता है.
    • 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 =&gt {
      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 प्रोजेक्ट के हिस्से के तौर पर सेव किया जाता है. इसका इस्तेमाल, आपके प्रोजेक्ट के हर ऐप्लिकेशन में किसी उपयोगकर्ता की पहचान करने के लिए किया जा सकता है. भले ही, उपयोगकर्ता किसी भी तरीके से साइन इन करे.

  • अपने ऐप्लिकेशन में, 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;
    }
  • आपके Firebase Realtime Database और Cloud Storage सुरक्षा नियमों में, साइन इन किए गए उपयोगकर्ता की यूनीक आईडी auth वैरिएबल से पाई जा सकती है. इसका इस्तेमाल, यह कंट्रोल करने के लिए किया जा सकता है कि कोई उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.

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

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

auth.SignOut();