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

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

قبل ان تبدأ

قم بإعداد مشروع الوحدة الخاص بك

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

    يبدو مقتطف الموارد كالمثال التالي:

    <?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 Games لـ Unity واستخرجه.

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

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

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

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

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

auth.SignOut();