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

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

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

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

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

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

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

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

साइन इन की सेवा देने वाली कंपनी के तौर पर Apple की सेवाएं चालू करें

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

Apple की पहचान छिपाकर डेटा इस्तेमाल करने की ज़रूरी शर्तों को पूरा करता है

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

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

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

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

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

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

Firebase SDK टूल की मदद से साइन-इन की प्रोसेस को मैनेज करना

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

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

  1. Apple साइन इन नॉन और टोकन जनरेशन को मैनेज करने के लिए, तीसरे पक्ष का प्लगिन इंस्टॉल करें. जैसे, Unity का 'Apple Asset Storage से साइन इन करें' पैकेज. 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 साइन-इन टोकन जनरेट करने की ज़रूरत नहीं पड़ती.

    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 की मदद से पुष्टि करें. इसके लिए, Firebase SDK टूल का इस्तेमाल करके वेब पर आधारित सामान्य OAuth लॉगिन को अपने ऐप्लिकेशन में इंटिग्रेट करें, ताकि आखिर से आखिर तक साइन-इन किया जा सके.

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 पैरामीटर सेट करें. इस्तेमाल की जाने वाली भाषाओं के लिए, 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. पुष्टि करने वाले ऑब्जेक्ट का इस्तेमाल करके, 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 पुष्टि के साथ काम करने वाली दूसरी कंपनियों के उलट, Apple कोई फ़ोटो का यूआरएल नहीं देता.

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

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

अगले चरण

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

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

अपने Firebase रीयल टाइम डेटाबेस और Cloud Storage के सुरक्षा नियमों में, आपको ऑथराइज़ेशन वैरिएबल से साइन-इन किए हुए उपयोगकर्ता का यूनीक यूज़र आईडी मिल जाता है. साथ ही, उसका इस्तेमाल करके यह कंट्रोल किया जा सकता है कि उपयोगकर्ता कौनसा डेटा ऐक्सेस कर सकता है.