المصادقة في Unity باستخدام "خدمات ألعاب Google Play"

يمكنك استخدام خدمات ألعاب Google Play لتسجيل دخول اللاعبين إلى لعبة Android تم إنشاؤها على Firebase وUnity. لاستخدام "خدمات ألعاب Google Play" من خلال تسجيل الدخول إلى Firebase، يجب أولاً تسجيل الدخول إلى المشغّل باستخدام "ألعاب Google Play"، وطلب رمز مصادقة OAuth 2.0 عند إجراء ذلك. بعد ذلك، أرسِل رمز المصادقة إلى PlayGamesAuthProvider لإنشاء بيانات اعتماد في Firebase يمكنك استخدامها للمصادقة باستخدام Firebase.

قبل البدء

إعداد مشروع Unity

  1. أضِف ملف إعداد Firebase وحزمة تطوير برامج Firebase Unity إلى مشروع Unity على النحو الموضّح في إضافة Firebase إلى مشروع Unity. اتّبِع التعليمات الخاصة بنظام التشغيل Android.

    تأكَّد من استيراد FirebaseAuth.unitypackage.

  2. في Unity Editor (محرِّر Unity)، ضمن إعدادات التصميم > إعدادات المشغّل > إعدادات أخرى، اضبط اسم حزمة Android للعبتك.

  3. بعد ذلك، ضمن إعدادات الإصدار > إعدادات المشغّل > إعدادات النشر، اختَر ملف تخزين مفاتيح ومفتاحًا أو أنشئهما، ويتم استخدامهما لتوقيع حزمة Android. يجب توقيع ملف APK كي يتم تسجيل الدخول إلى "ألعاب Play"، وهذا الشرط لا ينطبق على النشر فحسب، بل خلال تطوير لعبتك أيضًا.

إعداد مشروع Firebase

  1. في وحدة تحكُّم Firebase، انتقِل إلى مشروع Firebase الذي سجّلت فيه مشروع Unity.

  2. اضبط بصمة SHA-1 للعبتك من صفحة الإعدادات في وحدة تحكم Firebase باستخدام المفتاح الذي أعددته في Unity.

    يمكنك الحصول على بصمة الإصبع SHA-1 لمفتاحك باستخدام الأمر keytool:

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    ويمكنك بدلاً من ذلك الحصول على تجزئة SHA لشهادة التوقيع باستخدام الأمر Gradle signingReport:

    gradlew signingReport

    يجب توقيع ملف APK باستخدام هذا المفتاح، حتى أثناء تطوير التطبيق.

  3. تفعيل "ألعاب Google Play" كموفِّر لتسجيل الدخول:

    1. في وحدة تحكُّم Firebase، افتح قسم المصادقة.

    2. أنشئ واحصل على معرّف عميل خادم الويب وسر العميل لمشروعك:

      1. ضمن علامة التبويب طريقة تسجيل الدخول، فعِّل خيار موفِّر خدمة تسجيل الدخول إلى Google.

      2. انسخ معرِّف عميل خادم الويب وسره من موفّر تسجيل الدخول إلى Google.

    3. ضمن علامة التبويب طريقة تسجيل الدخول، فعِّل موفّر تسجيل الدخول إلى ألعاب Play، وحدِّد معرِّف عميل خادم الويب وسر العميل لمشروعك، والذي حصلت عليه في الخطوة الأخيرة.

إعداد خدمات ألعاب Play باستخدام معلومات تطبيقك على Firebase

  1. في Google Play Console، افتح تطبيق Google Play أو أنشئ تطبيقًا.

  2. في قسم النمو، انقر على خدمات ألعاب Play > الإعداد والإدارة > الإعداد.

  3. انقر على نعم، لعبتي تستخدم Google APIs، واختَر مشروع Firebase من القائمة، ثم انقر على استخدام.

  4. في صفحة ضبط "خدمات ألعاب Play"، انقر على إضافة بيانات اعتماد.

    1. اختَر النوع خادم الألعاب.
    2. في الحقل عميل OAuth، اختَر معرِّف عميل الويب لمشروعك. تأكَّد من أنّ هذا هو معرِّف العميل نفسه الذي حدّدته عند تفعيل تسجيل الدخول إلى "ألعاب Play".
    3. احفظ التغييرات.
  5. إذا كنت لا تزال في صفحة إعداد "خدمات ألعاب Play"، انقر على إضافة بيانات اعتماد مرة أخرى.

    1. اختَر نوع جهاز Android.
    2. في الحقل عميل OAuth، اختَر معرِّف عميل Android لمشروعك. (إذا لم يظهر لك معرّف عميل Android، فتأكد من ضبط بصمة إصبع SHA-1 للعبتك في وحدة تحكم Firebase).
    3. احفظ التغييرات.
  6. في صفحات الأحداث والإنجازات ولوحات الصدارة، يمكنك إنشاء أي من موارد ألعاب Play التي تريد استخدامها مع لعبتك (إذا لم تكن تريد استخدام أي منها على الفور، يمكنك إنشاء إدخال عنصر نائب). بعد ذلك، في أي صفحة من صفحات الأحداث أو الإنجازات أو لوحات الصدارة، انقر على الحصول على الموارد وانسخ مقتطف موارد Android في مكان مريح. ستحتاج إلى المقتطف لإعداد المكوّن الإضافي "خدمات ألعاب Google Play".

    يظهر مقتطف الموارد على النحو التالي:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. في صفحة المختبِرون، يمكنك إضافة عناوين البريد الإلكتروني لأي مستخدمين مطلوب السماح لهم بتسجيل الدخول إلى لعبتك قبل إصدارها في "متجر Play".

دمج تسجيل الدخول إلى "ألعاب Play" في لعبتك

  1. يمكنك تنزيل أحدث إصدار من مكوّن "ألعاب Play" الإضافي لنظام Unity واستخراجه.

  2. استورِد حزمة Unity الخاصة بالمكوّن الإضافي إلى مشروع Unity. يمكنك العثور على حزمة Unity في دليل current-build لأرشيف الإصدارات.

  3. إعداد المكوّن الإضافي لتطبيق "ألعاب Play":

    1. انقر على نافذة > ألعاب Google Play > الإعداد > إعداد Android لفتح شاشة ضبط Android.
    2. ألصِق مقتطف موارد Android الذي حصلت عليه من Play Console في حقل تعريف الموارد.
    3. ألصِق معرِّف العميل الخاص بخادم الويب، والذي قدّمته عند تفعيل تسجيل الدخول إلى "ألعاب Play" ضمن "وحدة تحكُّم Firebase"، في الحقل Client-ID (رقم تعريف العميل).
    4. انقر على إعداد.
  4. في لعبتك، اضبط برنامج "ألعاب Play" مع تفعيل إعداد "RequestServerAuthCode":

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. بعد ذلك، عندما يختار اللاعب تسجيل الدخول باستخدام تطبيق "ألعاب Play"، يمكنك طلب Social.localUser.Authenticate():

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

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

بعد إضافة تسجيل الدخول إلى "ألعاب Play" إلى لعبتك، يمكنك استخدام رمز المصادقة من "خدمات ألعاب Play" للمصادقة مع Firebase.

  1. بعد أن يسجّل اللاعب الدخول بنجاح باستخدام تطبيق "ألعاب Play"، احصل على رمز مصادقة لحساب اللاعب في معالج متابعة تسجيل الدخول:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. بعد ذلك، يمكنك استبدال رمز المصادقة من خدمات ألعاب Play ببيانات اعتماد Firebase واستخدام بيانات اعتماد Firebase لمصادقة اللاعب:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    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);
    });
    

الخطوات اللاحقة

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

في لعبتك، يمكنك الحصول على المعرّف الفريد في Firebase للمستخدم من كائن Firebase.Auth.FirebaseUser:

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  string playerName = user.DisplayName;

  // 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 في الوقت الفعلي" و"قواعد أمان Cloud Storage"، يمكنك الحصول على معرّف المستخدم الفريد الخاص بالمستخدم الذي سجّل الدخول من المتغيّر auth واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.

للحصول على معلومات عن اللاعب في "ألعاب Play" أو الوصول إلى خدمات "ألعاب Play"، يمكنك استخدام واجهات برمجة التطبيقات التي يوفّرها المكوّن الإضافي "ألعاب Play".

لتسجيل خروج مستخدم، يُرجى الاتصال بالرقم SignOut():

auth.SignOut();