المصادقة باستخدام تسجيل الدخول باستخدام Google وUnity

يمكنك السماح للمستخدمين بالمصادقة باستخدام Firebase من خلال حساباتهم على Google عن طريق دمج ميزة "تسجيل الدخول باستخدام حساب Google" في تطبيقك.

قبل البدء

إعداد مشروع Unity

قبل أن تتمكّن من استخدام Firebase Authentication، عليك تنفيذ ما يلي:

  • سجِّل مشروع Unity الخاص بك وأعدَّه لاستخدام Firebase.

    • إذا كان مشروع Unity يستخدم Firebase، يعني ذلك أنّه سبق تسجيله وإعداده لاستخدام Firebase.

    • إذا لم يكن لديك مشروع على Unity، يمكنك تنزيل نموذج تطبيق.

  • أضِف حزمة تطوير البرامج (SDK) الخاصة بـ Firebase Unity (على وجه التحديد، FirebaseAuth.unitypackage) إلى مشروعك على Unity.

يُرجى العِلم أنّ إضافة Firebase إلى مشروع Unity تتضمّن مهامًا في كلّ من وحدة تحكّم Firebase ومشروع Unity المفتوح (على سبيل المثال، يمكنك تنزيل ملفات إعدادات Firebase من وحدة التحكّم، ثم نقلها إلى مشروع Unity).

إعداد مشروع Firebase وبيانات الاعتماد

  1. نظام التشغيل Android: حدِّد الملف المرجعي لشهادة SHA-1 الخاصة بتطبيقك في وحدة تحكّم Firebase:

    1. في وحدة تحكّم "Firebase"، انتقِل إلى الإعدادات > علامة التبويب إعدادات عامة.
    2. انتقِل إلى بطاقة تطبيقاتك، واختَر تطبيق Android، ثم أضِف الملف المرجعي لشهادة SHA-1 في حقل الملفات المرجعية لشهادة SHA.

      يمكنك استرداد الملف المرجعي لشهادة SHA-1 لمخزن المفاتيح باستخدام keytool:

      keytool -keystore path-to-keystore.keystore -list -v
      

      يُرجى الاطّلاع على مقالة مصادقة العميل لمزيد من التفاصيل حول الحصول على الملف المرجعي لشهادة SHA لتطبيقك.

  2. فعِّل ميزة "تسجيل الدخول باستخدام حساب Google" وانسخ معرّف عميل الويب:

    1. في وحدة تحكّم Firebase، انتقِل إلى الأمان > المصادقة.
    2. في علامة التبويب طريقة تسجيل الدخول (Sign-in method)، فعِّل موفّر تسجيل الدخول من Google.
    3. وسِّع قسم إعدادات حزمة تطوير البرامج (SDK) للويب وانسخ معرِّف عميل الويب (على سبيل المثال، 123456-abc.apps.googleusercontent.com). يمثّل هذا المعرِّف مطالبة الجمهور (aud) لرموز التعريف المميّزة وهو مطلوب لكل من Android وiOS.
    4. انقر على حفظ.
  3. تعديل ملفات إعداد Firebase ونسخ معرّف العميل العكسي لنظام التشغيل iOS:

    1. نزِّل أحدث ملفات إعداد Firebase من وحدة تحكّم Firebase (google-services.json لنظام التشغيل Android وGoogleService-Info.plist لنظام التشغيل iOS) واستبدِل أي نُسخ قديمة في مشروع Unity. (راجِع إضافة Firebase إلى مشروع Unity).
    2. نظام التشغيل iOS: افتح ملف GoogleService-Info.plist وانسخ قيمة مفتاح REVERSED_CLIENT_ID (على سبيل المثال، com.googleusercontent.apps.12345-abc). هذه القيمة مطلوبة لضبط مخطّط عنوان URL لإعادة التوجيه في نظام التشغيل iOS.

دمج المكوّن الإضافي "تسجيل الدخول باستخدام حساب Google" في مشروع Unity

  1. استيراد المكوّن الإضافي:

    1. إذا كنت تدمج المكوّن الإضافي في مشروع حالي، عليك الاحتفاظ بنسخة احتياطية من مشروعك وإزالة أي مكوّنات إضافية قديمة لميزة "تسجيل الدخول باستخدام حساب Google" قبل المتابعة.
    2. نزِّل GoogleSignInNative.unitypackage من GitHub واستورِده إلى مشروعك على Unity (مواد العرض > استيراد حزمة > حزمة مخصّصة). تأكَّد من اختيار جميع الملفات وانقر على استيراد.
  2. ضبط إعدادات المكوّن الإضافي:

    1. في محرِّر Unity، انتقِل إلى Window > تسجيل الدخول باستخدام حساب Google Native > Settings.
    2. الصِق معرّف عميل الويب في الحقل الأول.
    3. الصِق معرِّف العميل العكسي لنظام التشغيل iOS في الحقل الثاني.
    4. انقر على حفظ الإعدادات.
  3. حلّ التبعيات الأصلية:

    1. انتقِل إلى Assets > External Dependency Manager > Android Resolver > Force Resolve.
    2. انتظِر رسالة النجاح. يؤدي ذلك إلى تنزيل مكتبات googleid وandroidx Credential Manager الأصلية.

الوصول إلى صف "Firebase.Auth.FirebaseAuth"

تُعدّ فئة FirebaseAuth هي البوابة لجميع طلبات البيانات من واجهة برمجة التطبيقات. ويمكن الوصول إليها من خلال FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

المصادقة باستخدام Firebase

  1. إعداد GoogleSignInManager في المشهد:

    1. أنشئ GameObject فارغًا في المشهد الأولي باسم GoogleSignInManager.
    2. أرفِق نص GoogleSignInManager.cs البرمجي بها.
    3. اسحب مادة العرض GoogleSignInNativeSettings (الموجودة في Assets/GoogleSignInNative/Resources) إلى خانة إعدادات تسجيل الدخول في النص البرمجي.
  2. تفعيل ميزة "تسجيل الدخول باستخدام حساب Google" واستبدال الرمز المميّز لرقم التعريف ببيانات اعتماد Firebase:

    أنشئ نصًا برمجيًا لوحدة التحكّم يشترك في GoogleSignInManager.OnSignInCompleted و GoogleSignInManager.OnSignInFailed، ويشغّل تسجيل الدخول باستخدام GoogleSignInManager.Instance.StartSignIn()، ويستبدل رمز مميّز لرقم تعريف Google الناتج ببيانات اعتماد Firebase باستخدام GoogleAuthProvider.GetCredential:

    using Firebase.Auth;
    using Firebase.Extensions;
    using UnityEngine;
    
    public class MyAuthController : MonoBehaviour
    {
        private FirebaseAuth auth;
    
        private void Awake()
        {
            auth = FirebaseAuth.DefaultInstance;
        }
    
        private void OnEnable()
        {
            GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed += HandleSignInFailure;
        }
    
        private void OnDisable()
        {
            GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed -= HandleSignInFailure;
        }
    
        public void OnSignInButtonClick()
        {
            GoogleSignInManager.Instance.StartSignIn();
        }
    
        private void HandleSignInSuccess(string idToken)
        {
            Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase...");
    
            Credential credential = GoogleAuthProvider.GetCredential(idToken, null);
            auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => {
                if (task.IsCanceled)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
                    return;
                }
                if (task.IsFaulted)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
                    return;
                }
    
                AuthResult result = task.Result;
                Debug.LogFormat("User signed in successfully: {0} ({1})",
                    result.User.DisplayName, result.User.UserId);
            });
        }
    
        private void HandleSignInFailure(string error)
        {
            Debug.LogError($"[Auth] Google Sign-In failed: {error}");
        }
    }
    

إنشاء تطبيقك

Android

  • تأكَّد من أنّ اسم الحزمة في إعدادات المشغّل يتطابق تمامًا مع بيانات اعتماد OAuth في Firebase وGoogle Cloud.
  • تأكَّد من ضبط الحدّ الأدنى لمستوى واجهة برمجة التطبيقات على 34 أو أعلى.
  • انقر على إنشاء وتشغيل (Build and Run).

iOS

  • أنشئ مشروعك في Unity لإنشاء مشروع Xcode، ثم افتح ملف .xcworkspace الذي تم إنشاؤه.
  • في Xcode، انتقِل إلى علامة التبويب التوقيع والإمكانات (Signing & Capabilities) واختَر فريق التطوير (Development Team).
  • يضيف المكوّن الإضافي تلقائيًا مخطّط عنوان URL المخصّص (REVERSED_CLIENT_ID) إلى مشروع Xcode. أنشئ التطبيق وشغِّله على جهاز فعلي.

الخطوات التالية

بعد أن يسجّل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد التي استخدمها لتسجيل الدخول، أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات مقدّم خدمة المصادقة. يتم تخزين هذا الحساب الجديد كجزء من مشروع Firebase، ويمكن استخدامه لتحديد هوية المستخدم في كل تطبيق في مشروعك، بغض النظر عن كيفية تسجيل المستخدم الدخول.

  • في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من عنصر Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • في قواعد الأمان في Firebase Realtime Database وCloud Storage، يمكنك الحصول على رقم تعريف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغيّر auth، واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام عدة مقدّمي خدمات مصادقة من خلال ربط بيانات اعتماد مقدّم خدمة المصادقة بحساب مستخدم حالي.

لتسجيل خروج مستخدم، يمكنك استدعاء SignOut():

auth.SignOut();