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

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

قبل البدء

إعداد مشروعك على Unity

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

    احرص على استيراد FirebaseAuth.unitypackage.

  2. في محرِّر 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 Games كموفّر خدمة تسجيل الدخول:

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

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

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

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

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

ضبط Play Games services باستخدام معلومات تطبيقك على Firebase

  1. في وحدة تحكّم Google Play، افتح تطبيق Google Play أو أنشئ تطبيقًا.

  2. في قسم النمو، انقر على Play Games services > الإعداد والإدارة > الضبط.

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

  4. في صفحة إعدادات Play Games services، انقر على إضافة بيانات اعتماد.

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

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

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

    <?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 Store.

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

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

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

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

    1. انقر على النافذة > ألعاب Google Play > الإعداد > إعداد Android لفتح شاشة إعدادات Android.
    2. الصِق مقتطف موارد Android الذي حصلت عليه من Play Console في حقل تعريف الموارد.
    3. الصِق معرّف العميل لخادم الويب الذي قدّمته عند تفعيل تسجيل الدخول إلى "ألعاب Play" في وحدة تحكّم Firebase، في حقل معرّف العميل.
    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 Games. يتم تخزين هذا الحساب الجديد كجزء من مشروعك على 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"، يمكنك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغيّر auth واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.

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

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

auth.SignOut();