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

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

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

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

Apple डेवलपर प्रोग्राम में शामिल हों

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

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

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

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

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

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

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

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

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

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

Firebase.Auth.FirebaseAuth क्लास तक पहुंचें

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

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

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

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

  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.Auth.FirebaseAccountLinkException मानक Firebase.FirebaseException के बजाय फेंक दिया जाएगा। इस मामले में AuthResult.AdditionalInfo में एक UserInfo.UpdatedCredential गुण शामिल है, जो मान्य होने पर, FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync के माध्यम से Apple से जुड़े उपयोगकर्ता को साइन-इन करने के लिए उपयोग किया जा सकता है। अद्यतित क्रेडेंशियल साइन-इन ऑपरेशन के लिए अस्थायी रूप से नए Apple साइन-इन टोकन उत्पन्न करने की आवश्यकता को कम करता है।

    auth.CurrentUser.LinkWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompleted) {
            // 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 && task.Result.AdditionalUserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInAndRetrieveDataWithCredentialAsync(task.Result.AdditionalUserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( authResultTask => {
                      // Handle Auth result.
                    });
                } else {
                  Debug.Log("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });
    

Android पर

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

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

  1. Apple के लिए उपयुक्त प्रदाता ID के साथ कॉन्फ़िगर किए गए 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. प्रामाणिक प्रदाता वस्तु का उपयोग करके फायरबेस के साथ प्रमाणित करें। ध्यान दें कि अन्य FirebaseAuth संचालन के विपरीत, यह एक वेब दृश्य पॉप अप करके आपके UI को नियंत्रित करेगा जिसमें उपयोगकर्ता अपनी साख दर्ज कर सकता है।

    साइन इन फ्लो शुरू करने के लिए, 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 उस उपयोगकर्ता के लिए एक अद्वितीय ईमेल पता प्रदान करता है (फ़ॉर्म xyz@privaterelay.appleid.com ), जिसे वह आपके ऐप के साथ साझा करता है। यदि आपने निजी ईमेल रिले सेवा को कॉन्फ़िगर किया है, तो Apple उपयोगकर्ता के वास्तविक ईमेल पते पर गुमनाम पते पर भेजे गए ईमेल को अग्रेषित करता है।

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

अगले कदम

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

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

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