المصادقة في 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 (محرِّر Unity)، ضمن Build Settings (إعدادات الإنشاء) > إعدادات المشغّل > مشاكل أخرى "الإعدادات" تتيح ضبط اسم حزمة Android للعبتك.

  3. بعد ذلك، ضمن إنشاء الإعدادات > إعدادات المشغّل > Publishing Settings (إعدادات النشر) اختيار أو إنشاء ملف تخزين مفاتيح ومفتاح، يمكن استخدامهما لتوقيع ملف طرد. يجب توقيع ملف 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" إلى 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.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();