Unity'de bir hesaba birden fazla kimlik doğrulama sağlayıcı bağlama

Kullanıcıların çoklu kimlik doğrulama kullanarak uygulamanızda oturum açmasına izin verebilirsiniz kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak Kullanıcılar, kimlik doğrulama sağlayıcısından ödeme alınır. Örneğin, Yeşil Ofis'in web sitesinde bir Google hesabını bağlayabilir ve duymuş olabilirsiniz. Alternatif olarak, anonim bir kullanıcı bir Facebook hesabını bağlayıp daha sonra uygulamanızı kullanmaya devam etmek için Facebook'ta oturum açın.

Başlamadan önce

İki veya daha fazla kimlik doğrulama sağlayıcı için destek ekleyin ( anonim kimlik doğrulama) ekleyebilirsiniz.

FirebaseAuth sınıfı, tüm API çağrılarına yönelik ağ geçididir. FirebaseAuth.DefaultInstance üzerinden erişilebilir.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Kimlik doğrulama sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlamak için:

  1. Herhangi bir kimlik doğrulama sağlayıcısı veya yöntemi kullanarak kullanıcının oturumunu açın.
  2. Yeni kimlik doğrulama sağlayıcı için oturum açma akışını en fazla tamamlayın ancak Örneğin, Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync yöntemlerinden birini çağırın. Örneğin, Kullanıcının Google kimliği jetonu, Facebook erişim jetonu veya e-postası ve şifresi.
  3. Yeni kimlik doğrulama sağlayıcı için bir Firebase.Auth.Credential alın:

    Google ile Oturum Açma
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    Facebook'a Giriş
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    E-posta şifresiyle oturum açma
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
  4. Firebase.Auth.Credential nesnesini oturum açmış kullanıcının cihazına iletin. LinkWithCredentialAsync yöntemi:

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

    Kimlik bilgileri aşağıdaki gibiyse LinkWithCredentialAsync çağrısı başarısız olur başka bir kullanıcı hesabına bağlı. Böyle bir durumda, hesapları ve ilişkili verileri uygulamanıza uygun şekilde birleştirme:

    // 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 çağrısı başarılı olursa kullanıcı artık ve aynı Firebase verilerine erişmelerini isteyebilir.

Bir kimlik doğrulama sağlayıcı ile hesap arasındaki bağlantıyı kaldırabilirsiniz. Böylece, kullanıcı daha uzun süre oturum açmanızı sağlar.

Bir kimlik doğrulama sağlayıcının kullanıcı hesabıyla olan bağlantısını kaldırmak için sağlayıcı kimliğini UnlinkAsync yöntemini çağırın. Yetkilendirmenin sağlayıcı kimliklerini alabilirsiniz. sesli arama yoluyla bir kullanıcıya bağlanan sağlayıcılar ProviderData değerleridir.

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