Apple और Unity का उपयोग करके प्रमाणित करें

आप एंड-टू-एंड OAuth 2.0 साइन-इन प्रवाह को पूरा करने के लिए Firebase SDK का उपयोग करके अपने उपयोगकर्ताओं को उनकी Apple ID का उपयोग करके Firebase से प्रमाणित करने दे सकते हैं।

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

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

Apple डेवलपर प्रोग्राम से जुड़ें

Apple के साथ साइन इन केवल Apple डेवलपर प्रोग्राम के सदस्यों द्वारा ही कॉन्फ़िगर किया जा सकता है।

Apple के साथ साइन इन कॉन्फ़िगर करें

आपके फायरबेस प्रोजेक्ट में Apple साइन इन सक्षम और ठीक से कॉन्फ़िगर किया जाना चाहिए। Apple डेवलपर कॉन्फ़िगरेशन Android और Apple प्लेटफ़ॉर्म पर भिन्न होता है। कृपया आगे बढ़ने से पहले iOS+ और/या Android गाइड के "कॉन्फ़िगर साइन इन विथ एप्पल" अनुभाग का पालन करें।

Apple को साइन-इन प्रदाता के रूप में सक्षम करें

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

Apple अज्ञात डेटा आवश्यकताओं का अनुपालन करें

साइन इन विद ऐप्पल उपयोगकर्ताओं को साइन इन करते समय अपने ईमेल पते सहित अपने डेटा को अज्ञात करने का विकल्प देता है। जो उपयोगकर्ता इस विकल्प को चुनते हैं उनके पास privaterelay.appleid.com ​​डोमेन के साथ ईमेल पते होते हैं। जब आप अपने ऐप में साइन इन विद ऐप्पल का उपयोग करते हैं, तो आपको इन अज्ञात ऐप्पल आईडी के संबंध में ऐप्पल की किसी भी लागू डेवलपर नीतियों या शर्तों का पालन करना होगा।

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

  • किसी ईमेल पते को अज्ञात Apple ID से लिंक करें या इसके विपरीत।
  • किसी फ़ोन नंबर को अज्ञात Apple ID से लिंक करें या इसके विपरीत
  • एक गैर-गुमनाम सामाजिक क्रेडेंशियल (फेसबुक, गूगल, आदि) को एक अज्ञात ऐप्पल आईडी से लिंक करें या इसके विपरीत।

उपरोक्त सूची संपूर्ण नहीं है. यह सुनिश्चित करने के लिए कि आपका ऐप Apple की आवश्यकताओं को पूरा करता है, अपने डेवलपर खाते के सदस्यता अनुभाग में Apple डेवलपर प्रोग्राम लाइसेंस अनुबंध देखें।

Firebase.Auth.FirebaseAuth वर्ग तक पहुंचें

FirebaseAuth क्लास सभी API कॉल के लिए प्रवेश द्वार है। इसे FirebaseAuth.DefaultInstance के माध्यम से एक्सेस किया जा सकता है।
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

फायरबेस एसडीके के साथ साइन-इन प्रवाह को संभालें

Apple के साथ साइन-इन करने की प्रक्रिया Apple और Android प्लेटफ़ॉर्म पर अलग-अलग होती है।

एप्पल प्लेटफॉर्म पर

  1. ऐप्पल साइन इन नॉन और टोकन जेनरेशन को संभालने के लिए एक थर्ड पार्टी प्लगइन इंस्टॉल करें, जैसे कि यूनिटी साइन इन विद ऐप्पल एसेट स्टोरेज पैकेज । आपको फायरबेस संचालन में उपयोग के लिए उत्पन्न रैंडम नॉन स्ट्रिंग को उसकी कच्ची स्ट्रिंग स्थिति में प्लंब करने के लिए कोड को बदलने की आवश्यकता हो सकती है (अर्थात, नॉन का SHA256 डाइजेस्ट फॉर्म बनने से पहले इसकी एक प्रति संग्रहीत करें)।

  2. फ़ायरबेस क्रेडेंशियल बनाने और फ़ायरबेस में साइन इन करने के लिए परिणामी टोकन स्ट्रिंग और कच्चे नॉन का उपयोग करें।

    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 प्रॉपर्टी शामिल है, जो वैध होने पर, FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync के माध्यम से Apple-लिंक्ड उपयोगकर्ता को साइन-इन करने के लिए उपयोग किया जा सकता है। अद्यतन क्रेडेंशियल साइन-इन ऑपरेशन के लिए नॉन के साथ नए ऐप्पल साइन-इन टोकन उत्पन्न करने की आवश्यकता को रोकता है।

    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
            }
          }
        });
    

एंड्रॉइड पर

एंड्रॉइड पर, शुरू से अंत तक साइन-इन प्रवाह को पूरा करने के लिए फायरबेस एसडीके का उपयोग करके अपने ऐप में वेब-आधारित जेनेरिक OAuth लॉगिन को एकीकृत करके अपने उपयोगकर्ताओं को फायरबेस के साथ प्रमाणित करें।

फायरबेस एसडीके के साथ साइन-इन प्रवाह को संभालने के लिए, इन चरणों का पालन करें:

  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 पैरामीटर सेट करें। समर्थित स्थानों के लिए 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. प्रामाणिक प्रदाता ऑब्जेक्ट का उपयोग करके फायरबेस से प्रमाणित करें। ध्यान दें कि अन्य फायरबेसऑथ ऑपरेशंस के विपरीत, यह एक वेब दृश्य को पॉप अप करके आपके यूआई को नियंत्रित करेगा जिसमें उपयोगकर्ता अपने क्रेडेंशियल दर्ज कर सकते हैं।

    साइन इन प्रवाह शुरू करने के लिए, 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 खातों को अन्य डेटा से लिंक करने से पहले आपको उपयोगकर्ताओं से स्पष्ट सहमति प्राप्त करने की आवश्यकता है।

    उदाहरण के लिए, किसी फेसबुक खाते को वर्तमान फायरबेस खाते से लिंक करने के लिए, उपयोगकर्ता को फेसबुक पर साइन इन करने से प्राप्त एक्सेस टोकन का उपयोग करें:

    // 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 नोट्स के साथ साइन इन करें

फायरबेस ऑथ द्वारा समर्थित अन्य प्रदाताओं के विपरीत, ऐप्पल एक फोटो यूआरएल प्रदान नहीं करता है।

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

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

अगले कदम

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

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

अपने फायरबेस रीयलटाइम डेटाबेस और क्लाउड स्टोरेज सुरक्षा नियमों में, आप साइन-इन किए गए उपयोगकर्ता की अद्वितीय उपयोगकर्ता आईडी को ऑथ वेरिएबल से प्राप्त कर सकते हैं, और इसका उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि उपयोगकर्ता किस डेटा तक पहुंच सकता है।