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

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

قبل البدء

إعداد مشروع Unity

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

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

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

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

إعداد مشروع Firebase

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

  2. حدِّد بصمة SHA-1 للعبتك.

    1. في وحدة تحكّم Firebase، انتقِل إلى علامة التبويب الإعدادات > عام.

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

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

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

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

    gradlew signingReport

    راجِع مصادقة العميل للحصول على تفاصيل حول كيفية الحصول على الملف المرجعي لشهادة SHA الخاصة بتطبيقك.

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

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

    1. في وحدة تحكّم Firebase، انتقِل إلى الأمان > المصادقة.

    2. إنشاء معرّف عميل وخادم ويب ورمز سري للعميل والحصول عليهما:

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

      2. انسخ معرّف العميل وسرّه من موفّر خدمة تسجيل الدخول Google.

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

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

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

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

  1. بعد أن يسجّل اللاعب الدخول بنجاح باستخدام &quot;ألعاب Play&quot;، احصل على رمز التفويض لحساب اللاعب في معالج مواصلة تسجيل الدخول:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. بعد ذلك، استبدِل رمز التفويض من &quot;خدمات ألعاب Play&quot; ببيانات اعتماد 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، ويمكن استخدامه لتحديد هوية المستخدم على مستوى كل تطبيق في مشروعك.

في لعبتك، يمكنك الحصول على معرّف UID الخاص بالمستخدم على 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();