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

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

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

वेब कंटेनर इंस्टॉल करने से पहले

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

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

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

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

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

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

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

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

  1. Firebase कंसोल में, पुष्टि करने की सुविधा वाला सेक्शन खोलें.
  2. साइन इन करने का तरीका पेज पर, फ़ोन नंबर से साइन इन करने का तरीका चालू करें.

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

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

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

Firebase से पुष्टि करने की सुविधा के साथ इस्तेमाल करने के लिए, एपीएन से जुड़ी सूचनाएं पाने की सुविधा चालू करने के लिए:

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

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

    2. अपने डेवलपमेंट सर्टिफ़िकेट, प्रोडक्शन सर्टिफ़िकेट या दोनों के लिए, सर्टिफ़िकेट अपलोड करें बटन चुनें. कम से कम एक फ़ील्ड भरना ज़रूरी है.

    3. हर सर्टिफ़िकेट के लिए, .p12 फ़ाइल चुनें और अगर पासवर्ड उपलब्ध हो, तो वह डालें. पक्का करें कि इस सर्टिफ़िकेट का बंडल आईडी, आपके ऐप्लिकेशन के बंडल आईडी से मेल खाता हो. सेव करें चुनें.

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

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

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

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

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

auth.SignOut();