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

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

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

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

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

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

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

सुरक्षा से जुड़ी समस्याएं

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. उपयोगकर्ता का फ़ोन नंबर शामिल करने वाले PhoneAuthOptions को PhoneAuthProvider.VerifyPhoneNumber पर भेजें.
    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 सुरक्षा नियमों में, आपको ये काम करने की सुविधा मिलती है: साइन इन किए हुए उपयोगकर्ता का यूनीक User-ID, auth वैरिएबल से पाएं, और इसका इस्तेमाल यह कंट्रोल करने के लिए करें कि कोई उपयोगकर्ता किस डेटा को ऐक्सेस कर सकता है.

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

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

auth.SignOut();