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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

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

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

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

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

ऐप्पल के साथ साइन इन कॉन्फ़िगर करें

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

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

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

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

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

इसमें किसी भी प्रत्यक्ष पहचान वाली व्यक्तिगत जानकारी को किसी अनाम 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;

Firebase SDK के साथ साइन-इन प्रवाह को प्रबंधित करें

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

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

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

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

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

  3. उसी पैटर्न का उपयोग ReauthenticateAsync के साथ किया जा सकता है जिसका उपयोग संवेदनशील संचालन के लिए नए क्रेडेंशियल प्राप्त करने के लिए किया जा सकता है जिसके लिए हाल ही में लॉगिन की आवश्यकता होती है। अधिक जानकारी के लिए उपयोगकर्ता प्रबंधित करें देखें।

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

    ध्यान दें कि LinkWithCredentialAsync मानक Firebase.FirebaseException को लिंक विफलताओं पर फेंकना जारी रखेगा, और इसलिए एक अद्यतन क्रेडेंशियल वापस करने में असमर्थ है।

    auth.CurrentUser.LinkAndRetrieveDataWithCredentialAsync(
      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 && firebaseEx.UserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( signInTask => {
                      // Handle Sign in result.
                    });
                } else {
                  DebugLog("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });
    

एंड्रॉइड पर

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

Firebase SDK के साथ साइन-इन प्रवाह को प्रबंधित करने के लिए, इन चरणों का पालन करें:

  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.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.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.SignInResult signInResult = task.Result;
        Firebase.Auth.FirebaseUser user = signInResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. और, आप विभिन्न पहचान प्रदाताओं को मौजूदा खातों से जोड़ने के लिए linkWithCredential() का उपयोग कर सकते हैं।

    ध्यान दें कि आपके द्वारा उनके 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.LinkAndRetrieveDataWithCredentialAsync(credential)
        .ContinueWithOnMainThread( task => {
          if (task.IsCanceled) {
              Debug.LogError("LinkAndRetrieveDataWithCredentialAsync was canceled.");
              return;
          }
          if (task.IsFaulted) {
            Debug.LogError("LinkAndRetrieveDataWithCredentialAsync encountered an error: "
                           + task.Exception);
              return;
          }
    
          Firebase.Auth.SignInResult signInResult = task.Result;
          Firebase.Auth.FirebaseUser user = signInResult.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

ऐप्पल नोट्स के साथ साइन इन करें

Firebase Auth द्वारा समर्थित अन्य प्रदाताओं के विपरीत, Apple एक फोटो URL प्रदान नहीं करता है।

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

ऐप्पल केवल उपयोगकर्ता की जानकारी जैसे डिस्प्ले नाम को ऐप के साथ पहली बार साइन इन करता है। आम तौर पर, फायरबेस डिस्प्ले नाम को पहली बार ऐप्पल के साथ साइन इन करता है, जिसे आप getCurrentUser().getDisplayName() के साथ प्राप्त कर सकते हैं। हालांकि, अगर आपने पहले ऐप्पल का इस्तेमाल किसी उपयोगकर्ता को फ़ायरबेस का उपयोग किए बिना ऐप में साइन इन करने के लिए किया था, तो ऐप्पल उपयोगकर्ता के डिस्प्ले नाम के साथ फायरबेस प्रदान नहीं करेगा।

अगले कदम

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

अपने ऐप्स में, आप उपयोगकर्ता की बुनियादी प्रोफ़ाइल जानकारी firebase::auth::user ऑब्जेक्ट से प्राप्त कर सकते हैं। उपयोगकर्ता प्रबंधित करें देखें।

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