Apple और Unity का इस्तेमाल करके पुष्टि करें

अपने उपयोगकर्ताओं को Apple आईडी का इस्तेमाल करके Firebase से पुष्टि करने की अनुमति दी जा सकती है. इसके लिए, Firebase SDK टूल का इस्तेमाल करके, OAuth 2.0 के साइन-इन फ़्लो को पूरा करें.

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

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

Apple Developer Program में शामिल हों

'Apple से साइन इन करें' सुविधा को सिर्फ़ Apple Developer Program के सदस्य कॉन्फ़िगर कर सकते हैं.

'Apple से साइन इन करें' सुविधा को कॉन्फ़िगर करना

आपके Firebase प्रोजेक्ट में, 'Apple से साइन इन करें' सुविधा चालू होनी चाहिए और इसे सही तरीके से कॉन्फ़िगर किया गया हो. Apple Developer का कॉन्फ़िगरेशन, Android और Apple प्लैटफ़ॉर्म पर अलग-अलग होता है. आगे बढ़ने से पहले, कृपया iOS+ और/या Android गाइड के "Configure Sign In With Apple" सेक्शन में दिए गए निर्देशों का पालन करें.

Apple को साइन-इन की सुविधा देने वाली कंपनी के तौर पर चालू करना

  1. Firebase कंसोल में, Auth सेक्शन खोलें. साइन इन करने का तरीका टैब पर जाकर, Apple सेवा देने वाली कंपनी को चालू करें.
  2. Apple से साइन इन करने की सुविधा देने वाली कंपनी की सेटिंग कॉन्फ़िगर करें:
    1. अगर आपको अपना ऐप्लिकेशन सिर्फ़ Apple प्लैटफ़ॉर्म पर डिप्लॉय करना है, तो सर्विस आईडी, Apple Team ID, निजी कुंजी, और कुंजी आईडी फ़ील्ड को खाली छोड़ा जा सकता है.
    2. Android डिवाइसों पर सहायता पाने के लिए:
      1. अपने Android प्रोजेक्ट में Firebase जोड़ें. Firebase कंसोल में अपना ऐप्लिकेशन सेट अप करते समय, अपने ऐप्लिकेशन के SHA-1 सिग्नेचर को रजिस्टर करना न भूलें.
      2. Firebase कंसोल में, Auth सेक्शन खोलें. साइन इन करने का तरीका टैब पर जाकर, Apple सेवा देने वाली कंपनी को चालू करें. पिछले सेक्शन में बनाया गया सर्विस आईडी डालें. इसके अलावा, OAuth कोड फ़्लो कॉन्फ़िगरेशन सेक्शन में, अपना Apple Team ID, निजी कुंजी, और पिछले सेक्शन में बनाया गया कुंजी आईडी डालें.

Apple के पहचान छिपाकर रखे गए डेटा से जुड़ी ज़रूरी शर्तों का पालन करना

Sign In with Apple की सुविधा का इस्तेमाल करने वाले लोगों के पास, साइन इन करते समय अपने डेटा को गुमनाम बनाने का विकल्प होता है. इसमें उनका ईमेल पता भी शामिल है. इस विकल्प को चुनने वाले उपयोगकर्ताओं के ईमेल पते में privaterelay.appleid.com डोमेन होता है. अपने ऐप्लिकेशन में 'Apple से साइन इन करें' सुविधा का इस्तेमाल करते समय, आपको Apple की डेवलपर नीतियों या शर्तों का पालन करना होगा. ये नीतियां या शर्तें, Apple आईडी को गुमनाम बनाए रखने से जुड़ी होती हैं.

इसमें, उपयोगकर्ता की पहचान ज़ाहिर करने वाली किसी भी निजी जानकारी को गुमनाम किए गए Apple आईडी से जोड़ने से पहले, उपयोगकर्ता की ज़रूरी सहमति लेना शामिल है. Firebase Authentication का इस्तेमाल करते समय, ये कार्रवाइयां की जा सकती हैं:

  • किसी ईमेल पते को ऐसे Apple आईडी से लिंक करें जिससे उपयोगकर्ता की पहचान छिपी रहती है या इसके उलट करें.
  • किसी फ़ोन नंबर को छद्म नाम वाले Apple आईडी से लिंक करना या इसके उलट करना
  • पहचान छिपाकर इस्तेमाल की जाने वाली सोशल क्रेडेंशियल (Facebook, Google वगैरह) को पहचान छिपाकर इस्तेमाल किए जाने वाले Apple आईडी से लिंक करना या इसका उल्टा करना.

ऊपर दी गई सूची पूरी नहीं है. पक्का करें कि आपका ऐप्लिकेशन, Apple की ज़रूरी शर्तों को पूरा करता हो. इसके लिए, अपने डेवलपर खाते के सदस्यता सेक्शन में जाकर, Apple Developer Program के लाइसेंस समझौते को पढ़ें.

Firebase.Auth.FirebaseAuth क्लास को ऐक्सेस करना

FirebaseAuth क्लास, सभी एपीआई कॉल के लिए गेटवे है. इसे FirebaseAuth.DefaultInstance के ज़रिए ऐक्सेस किया जा सकता है.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Firebase SDK की मदद से, साइन-इन फ़्लो को मैनेज करना

Apple और Android प्लैटफ़ॉर्म पर, 'Apple से साइन इन करें' सुविधा का इस्तेमाल करने की प्रोसेस अलग-अलग होती है.

Apple के प्लैटफ़ॉर्म पर

  1. Apple से साइन इन करने के लिए, तीसरे पक्ष का कोई प्लगिन इंस्टॉल करें. इससे नॉनस और टोकन जनरेट करने में मदद मिलती है. जैसे, Unity's Sign In With Apple Asset Storage Package. आपको कोड में बदलाव करने की ज़रूरत पड़ सकती है, ताकि जनरेट की गई रैंडम नॉनस स्ट्रिंग को उसकी रॉ स्ट्रिंग की स्थिति में प्लंब किया जा सके. ऐसा Firebase ऑपरेशंस में इस्तेमाल करने के लिए किया जाता है. इसका मतलब है कि नॉनस का SHA256 डाइजेस्ट फ़ॉर्म बनाने से पहले, उसकी एक कॉपी सेव करें.

  2. नतीजे के तौर पर मिले टोकन स्ट्रिंग और रॉ नॉन्स का इस्तेमाल करके, Firebase क्रेडेंशियल बनाएं और Firebase में साइन इन करें.

    Firebase.Auth.Credential credential =
        Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

  3. इसी पैटर्न का इस्तेमाल ReauthenticateAsync के साथ किया जा सकता है. इसका इस्तेमाल, संवेदनशील कार्रवाइयों के लिए नए क्रेडेंशियल वापस पाने के लिए किया जा सकता है. इन कार्रवाइयों के लिए, हाल ही में लॉग इन करना ज़रूरी होता है. ज़्यादा जानकारी के लिए, उपयोगकर्ताओं को मैनेज करना लेख पढ़ें.

  4. Apple प्लैटफ़ॉर्म पर Apple से साइन इन करने की सुविधा को लिंक करते समय, आपको यह गड़बड़ी दिख सकती है कि मौजूदा Firebase खाता पहले ही Apple खाते से लिंक किया जा चुका है. ऐसा होने पर, स्टैंडर्ड Firebase.FirebaseException के बजाय Firebase.Auth.FirebaseAccountLinkException थ्रो किया जाएगा. इस मामले में, अपवाद में एक UserInfo.UpdatedCredential प्रॉपर्टी शामिल है. अगर यह मान्य है, तो इसका इस्तेमाल Apple से लिंक किए गए उपयोगकर्ता को FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync के ज़रिए साइन-इन करने के लिए किया जा सकता है. अपडेट किए गए क्रेडेंशियल की मदद से, साइन-इन करने के लिए Apple Sign-In का नया टोकन जनरेट करने की ज़रूरत नहीं होती.

    auth.CurrentUser.LinkWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompletedSuccessfully) {
            // Link Success
          } else {
            if (task.Exception != null) {
              foreach (Exception exception in task.Exception.Flatten().InnerExceptions) {
                Firebase.Auth.FirebaseAccountLinkException firebaseEx =
                  exception as Firebase.Auth.FirebaseAccountLinkException;
                if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInAndRetrieveDataWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( authResultTask => {
                      // Handle Auth result.
                    });
                } else {
                  Debug.Log("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });

Android पर

Android पर, Firebase का इस्तेमाल करके अपने उपयोगकर्ताओं की पुष्टि करें. इसके लिए, वेब पर आधारित सामान्य OAuth लॉगिन को Firebase SDK का इस्तेमाल करके अपने ऐप्लिकेशन में इंटिग्रेट करें, ताकि साइन-इन की प्रोसेस पूरी की जा सके.

Firebase SDK की मदद से साइन-इन फ़्लो को मैनेज करने के लिए, यह तरीका अपनाएं:

  1. Apple के लिए सही प्रोवाइडर आईडी के साथ कॉन्फ़िगर किए गए FederatedOAuthProviderData का एक इंस्टेंस बनाएं.

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. ज़रूरी नहीं: डिफ़ॉल्ट के अलावा, OAuth 2.0 के अन्य स्कोप तय करें. ये वे स्कोप होने चाहिए जिनके लिए आपको पुष्टि करने वाली कंपनी से अनुरोध करना है.

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("email");
    providerData.Scopes.Add("name");
    
  3. ज़रूरी नहीं: अगर आपको Apple की साइन-इन स्क्रीन को अंग्रेज़ी के अलावा किसी दूसरी भाषा में दिखाना है, तो locale पैरामीटर सेट करें. जिन भाषाओं में यह सुविधा उपलब्ध है उनके लिए, Sign In with Apple के दस्तावेज़ देखें.

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. प्रदाता का डेटा कॉन्फ़िगर हो जाने के बाद, इसका इस्तेमाल करके FederatedOAuthProvider बनाएं.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
      new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Auth provider ऑब्जेक्ट का इस्तेमाल करके, Firebase से पुष्टि करें. ध्यान दें कि FirebaseAuth की अन्य कार्रवाइयों के उलट, यह आपके यूज़र इंटरफ़ेस (यूआई) को कंट्रोल करेगा. इसके लिए, यह एक वेब व्यू पॉप-अप करेगा, जिसमें उपयोगकर्ता अपने क्रेडेंशियल डाल सकता है.

    साइन इन करने का फ़्लो शुरू करने के लिए, signInWithProvider को कॉल करें:

    auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("SignInWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("SignInWithProviderAsync encountered an error: " +
              task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  6. इसी पैटर्न का इस्तेमाल ReauthenticateWithProvider के साथ किया जा सकता है. इसका इस्तेमाल, संवेदनशील कार्रवाइयों के लिए नए क्रेडेंशियल वापस पाने के लिए किया जा सकता है. इन कार्रवाइयों के लिए, हाल ही में लॉग इन करना ज़रूरी होता है.

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. साथ ही, मौजूदा खातों को अलग-अलग आइडेंटिटी प्रोवाइडर से लिंक करने के लिए, LinkWithCredentialAsync() का इस्तेमाल किया जा सकता है.

    ध्यान दें कि Apple के मुताबिक, आपको उपयोगकर्ताओं के Apple खातों को अन्य डेटा से लिंक करने से पहले, उनसे साफ़ तौर पर सहमति लेनी होगी.

    उदाहरण के लिए, किसी Facebook खाते को मौजूदा Firebase खाते से लिंक करने के लिए, उस ऐक्सेस टोकन का इस्तेमाल करें जो आपको Facebook में उपयोगकर्ता के साइन इन करने पर मिला था:

    // Initialize a Facebook credential with a Facebook access token.
    
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    user.LinkWithCredentialAsync(credential)
        .ContinueWithOnMainThread( task => {
          if (task.IsCanceled) {
              Debug.LogError("LinkWithCredentialAsync was canceled.");
              return;
          }
          if (task.IsFaulted) {
            Debug.LogError("LinkWithCredentialAsync encountered an error: "
                           + task.Exception);
              return;
          }
    
          Firebase.Auth.AuthResult result = task.Result;
          Firebase.Auth.FirebaseUser user = result.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

Apple Notes से साइन इन करना

Firebase Auth के साथ काम करने वाली अन्य कंपनियों के उलट, Apple फ़ोटो का यूआरएल नहीं देता है.

इसके अलावा, जब उपयोगकर्ता अपना ईमेल पता ऐप्लिकेशन के साथ शेयर नहीं करता है, तो Apple उस उपयोगकर्ता के लिए एक यूनीक ईमेल पता (xyz@privaterelay.appleid.com के फ़ॉर्म में) उपलब्ध कराता है. इसे वह आपके ऐप्लिकेशन के साथ शेयर करता है. अगर आपने निजी ईमेल रिले सेवा कॉन्फ़िगर की है, तो Apple, पहचान छिपाकर बनाए गए पते पर भेजे गए ईमेल को उपयोगकर्ता के असली ईमेल पते पर फ़ॉरवर्ड करता है.

Apple, उपयोगकर्ता के साइन इन करने पर पहली बार ही ऐप्लिकेशन के साथ उपयोगकर्ता की जानकारी शेयर करता है. जैसे, डिसप्ले नेम. आम तौर पर, Firebase उस डिसप्ले नेम को सेव करता है जिसका इस्तेमाल उपयोगकर्ता ने पहली बार Apple से साइन इन करते समय किया था. इसे auth.CurrentUser.DisplayName की मदद से पाया जा सकता है. हालांकि, अगर आपने पहले Firebase का इस्तेमाल किए बिना, Apple से किसी उपयोगकर्ता को ऐप्लिकेशन में साइन इन करने की सुविधा दी थी, तो Apple, Firebase को उपयोगकर्ता का डिसप्ले नेम नहीं देगा.

अगले चरण

जब कोई उपयोगकर्ता पहली बार साइन इन करता है, तो उसके लिए एक नया खाता बनता है. यह खाता, उस क्रेडेंशियल से लिंक होता है जिसका इस्तेमाल करके उपयोगकर्ता ने साइन इन किया है. जैसे, उपयोगकर्ता का नाम और पासवर्ड, फ़ोन नंबर या पुष्टि करने वाली कंपनी की जानकारी. यह नया खाता, आपके Firebase प्रोजेक्ट के हिस्से के तौर पर सेव किया जाता है. इसका इस्तेमाल, आपके प्रोजेक्ट के हर ऐप्लिकेशन में किसी उपयोगकर्ता की पहचान करने के लिए किया जा सकता है. इससे कोई फ़र्क़ नहीं पड़ता कि उपयोगकर्ता ने कैसे साइन इन किया है.

अपने ऐप्लिकेशन में, Firebase.Auth.FirebaseUser ऑब्जेक्ट से उपयोगकर्ता की प्रोफ़ाइल की बुनियादी जानकारी पाई जा सकती है. उपयोगकर्ताओं को मैनेज करना लेख पढ़ें.

Firebase Realtime Database और Cloud Storage के सुरक्षा नियमों में, auth वैरिएबल से साइन इन किए गए उपयोगकर्ता का यूनीक आईडी पाया जा सकता है. इसका इस्तेमाल यह कंट्रोल करने के लिए किया जा सकता है कि कोई उपयोगकर्ता किस डेटा को ऐक्सेस कर सकता है.