ربط عدة مقدّمي خدمات مصادقة بحساب في Unity

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام طرق مصادقة متعددة. Google من خلال ربط بيانات اعتماد موفّر المصادقة بحساب مستخدم حالي. يمكن التعرّف على المستخدمين من خلال رقم تعريف مستخدم 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
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    تسجيل الدخول باستخدام كلمة مرور البريد الإلكتروني
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
  4. تمرير الكائن Firebase.Auth.Credential إلى حساب المستخدم الذي سجّل الدخول طريقة LinkWithCredentialAsync:

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