Unity में मौजूद किसी खाते से, पुष्टि करने वाली एक से ज़्यादा कंपनियों को लिंक करें

उपयोगकर्ताओं को पुष्टि करने वाले कई प्रोवाइडर का इस्तेमाल करके, आपके ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है. इसके लिए, पुष्टि करने वाले प्रोवाइडर के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करें. उपयोगकर्ताओं की पहचान एक ही Firebase यूज़र आईडी से की जाती है. भले ही, उन्होंने साइन इन करने के लिए किसी भी पुष्टि करने वाली कंपनी का इस्तेमाल किया हो. उदाहरण के लिए, पासवर्ड से साइन इन करने वाला कोई व्यक्ति, Google खाता लिंक कर सकता है. इसके बाद, वह इनमें से किसी भी तरीके से साइन इन कर सकता है. इसके अलावा, पहचान छिपाकर ऐप्लिकेशन का इस्तेमाल करने वाला कोई व्यक्ति, Facebook खाते को लिंक कर सकता है. इसके बाद, वह Facebook से साइन इन करके ऐप्लिकेशन का इस्तेमाल जारी रख सकता है.

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

अपने ऐप्लिकेशन में, पुष्टि करने की सेवा देने वाली दो या उससे ज़्यादा कंपनियों के लिए सहायता जोड़ें. इसमें गुमनाम तरीके से पुष्टि करने की सुविधा भी शामिल हो सकती है.

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

पुष्टि करने की सेवा देने वाली कंपनी के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करने के लिए:

  1. उपयोगकर्ता को किसी भी पुष्टि करने वाले प्रोवाइडर या तरीके का इस्तेमाल करके साइन इन करें.
  2. पुष्टि करने की नई सेवा देने वाली कंपनी के लिए, साइन-इन करने की प्रोसेस पूरी करें. हालांकि, Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync तरीकों में से किसी एक को कॉल करने से पहले ही यह प्रोसेस पूरी हो जानी चाहिए. उदाहरण के लिए, उपयोगकर्ता का Google आईडी टोकन, Facebook ऐक्सेस टोकन या ईमेल और पासवर्ड पाएं.
  3. पुष्टि करने वाली नई सेवा के लिए Firebase.Auth.Credential पाएं:

    Google साइन-इन
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    Facebook Login
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    ईमेल और पासवर्ड की मदद से साइन-इन करना
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
  4. साइन इन किए हुए उपयोगकर्ता के LinkWithCredentialAsync तरीके को Firebase.Auth.Credential ऑब्जेक्ट पास करें:

    auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(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;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

    अगर क्रेडेंशियल पहले से ही किसी दूसरे उपयोगकर्ता खाते से लिंक हैं, तो LinkWithCredentialAsync को कॉल नहीं किया जा सकेगा. इस स्थिति में, आपको अपने ऐप्लिकेशन के हिसाब से खातों और उनसे जुड़े डेटा को मर्ज करना होगा:

    // Gather data for the currently signed in User.
    string currentUserId = auth.CurrentUser.UserId;
    string currentEmail = auth.CurrentUser.Email;
    string currentDisplayName = auth.CurrentUser.DisplayName;
    System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl;
    
    // Sign in with the new credentials.
    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);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });

LinkWithCredentialAsync को कॉल करने पर, उपयोगकर्ता अब लिंक किए गए किसी भी पुष्टि करने वाले सेवा देने वाले व्यक्ति का इस्तेमाल करके साइन इन कर सकता है. साथ ही, उसी Firebase डेटा को ऐक्सेस कर सकता है.

किसी खाते से पुष्टि करने वाली सेवा देने वाली कंपनी को अलग किया जा सकता है, ताकि उपयोगकर्ता उस सेवा का इस्तेमाल करके साइन इन न कर पाए.

किसी उपयोगकर्ता खाते से पुष्टि करने की सेवा देने वाली कंपनी को अनलिंक करने के लिए, UnlinkAsync तरीके में सेवा देने वाली कंपनी का आईडी पास करें. किसी उपयोगकर्ता से लिंक किए गए पुष्टि करने वाली सेवाओं के आईडी पाने के लिए, ProviderData को कॉल करें.

// Unlink the sign-in provider from the currently active user.
// providerIdString is a string identifying a provider,
// retrieved via FirebaseAuth.FetchProvidersForEmail().
auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("UnlinkAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("UnlinkAsync encountered an error: " + task.Exception);
    return;
  }

  // The user has been unlinked from the provider.
  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

समस्या का हल

अगर आपको एक से ज़्यादा खाते लिंक करते समय गड़बड़ियां दिखती हैं, तो पुष्टि किए गए ईमेल पतों के बारे में जानकारी देने वाला दस्तावेज़ देखें.