تحديد مشاكل "خدمات ألعاب Play" وحلّها في ألعاب Android

توضّح هذه الصفحة كيفية تحديد المشاكل التي قد تواجهها أثناء تطوير ألعاب Android باستخدام "خدمات ألعاب Google Play" وحلّها.

التسجيل

لتحديد المشاكل في لعبتك وحلّها، يمكنك تفعيل التسجيل المفصّل على جهازك باستخدام الأمر adb shell. يمكنك بعد ذلك عرض رسائل سجلّ "خدمات ألعاب Google Play" باستخدام logcat.

تمكين التسجيل

لتفعيل التسجيل على جهاز الاختبار:

  1. وصِّل الجهاز بجهاز تم تثبيت حزمة تطوير البرامج (SDK) لنظام التشغيل Android عليه.

  2. افتح وحدة طرفية وشغِّل الأمر التالي:

    adb shell setprop log.tag.Games VERBOSE
  3. شغِّل لعبتك على الجهاز وأعِد تنفيذ الخطوات التي تؤدي إلى ظهور المشكلة التي تحاول تصحيحها.

  4. عرض السجلّات:

    adb logcat

إيقاف التسجيل

لإيقاف التسجيل المطوَّل لخدمة "ألعاب Play" على جهازك والعودة إلى السلوك الأصلي للتسجيل، شغِّل الأمر التالي:

adb shell setprop log.tag.Games INFO

تعذّر تسجيل الدخول

إذا لم تتمكّن من تسجيل دخول اللاعبين إلى لعبتك، تأكَّد أولاً من أنّك followed the instructions to إنشاء أرقام تعريف العملاء و إعداد خدمات الألعاب. إذا استمر ظهور أخطاء في تسجيل الدخول، يُرجى التحقّق من العناصر التالية للتأكّد من أنّه تم إعداد لعبتك بشكل صحيح.

التحقّق من علامات البيانات الوصفية

يجب أن يتضمّن AndroidManifest.xml علامة بيانات وصفية للألعاب. للتأكّد من أنّه تم إعداد علامات البيانات الوصفية بشكلٍ صحيح:

  1. افتح AndroidManifest.xml وتأكَّد من أنّه يحتوي على علامة meta-data كما هو موضّح أدناه:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. ابحث عن تعريف مرجع @string/app_id. ويتم تحديده عادةً في ملف XML يقع في دليل res/xml، على سبيل المثال res/xml/strings.xml أو res/xml/ids.xml.

  3. تأكَّد من أنّ قيمة مورد @string/app_id تتطابق مع رقم تعريف تطبيقك. يجب أن تحتوي قيمة هذا المورد على أرقام فقط. مثلاً:

    <string name="app_id">123456789012</string>
    

التحقّق من اسم الحزمة

يجب أن يتطابق اسم حزمة لعبتك مع اسم الحزمة الوارد في رقم تعريف العميل. للتحقّق من اسم الحزمة:

  1. افتح AndroidManifest.xml وتأكَّد من صحة اسم حزمة لعبتك. اسم الحزمة هو قيمة السمة package في العلامة manifest.

  2. تحقَّق من اسم الحزمة الذي قدّمته عند إنشاء رقم تعريف العميل. لإثبات ملكية اسم الحزمة في Google Play Console، انتقِل إلى Play Console وانقر على الإدخال المقابل للعبة.

  3. انتقِل إلى علامة التبويب التطبيقات المرتبطة وتحقّق من قائمة معرّفات العملاء. يجب أن يكون هناك تطبيق مرتبط على Android في هذه القائمة يتطابق اسم حِزمته مع اسم الحِزمة في AndroidManifest.xml. في حال عدم تطابق المعلومات، أنشئ ملفًا شخصيًا جديدًا للعميل باستخدام اسم الحزمة الصحيح وحاول تسجيل الدخول مرة أخرى.

التحقّق من الملف المرجعي للشهادة

يجب أن تتطابق الشهادة التي تُوقّع بها لعبتك مع معرف شهادة التوقيع المرتبط بمعرّف العميل. للتحقّق من ذلك، عليك أولاً التحقّق من الملف المرجعي لشهادة SHA1 على النحو التالي:

  1. ابحث عن ملف الشهادة واحصل على الملف المرجعي لشهادة SHA1. للحصول على بصمة إصبع SHA1، نفِّذ الأمر التالي:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. لاحِظ تسلسل الأرقام السداسية العشرية المُصنَّفة SHA1: في الإخراج. هذا هو الملف المرجعي لشهادتك.

بعد ذلك، تأكَّد من أنّ أداة الإنشاء تستخدم هذه الشهادة:

  1. أنشئ حزمة APK للعبة من أداة الإنشاء واوقِّعها باستخدام الشهادة المطلوبة. انسخ حزمة APK التي تم إنشاؤها إلى دليل مؤقت.
  2. في الدليل المؤقت، نفِّذ الأمر التالي لفك ضغط حزمة APK.

    unzip YourGame.apk
    
  3. أنشئ مفتاحًا خاصًا باستخدام ملف شهادة RSA:

    keytool -printcert -file META-INF/CERT.RSA
    

    بدلاً من ذلك، يمكنك إنشاء المفتاح الخاص باستخدام ملف شهادة DSA:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. لاحِظ تسلسل الأرقام السداسية العشرية في السطر الذي يحمل التصنيف SHA1:.

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

بعد ذلك، تحقَّق مما إذا كانت بصمة الشهادة تتطابق مع بصمة الإصبع التي تم ضبطها في رقم تعريف العميل. ولإجراء ذلك:

  1. افتح Play Console وانتقِل إلى لعبتك.
  2. في صفحة تفاصيل اللعبة، انتقِل إلى أسفل الصفحة وانقر على الرابط المؤدي إلى مشروع Google Cloud Platform المرتبط.
  3. اختَر مشروعك.
  4. في الشريط الجانبي على يمين الصفحة، اختَر واجهات برمجة التطبيقات والمصادقة. تأكَّد من أنّ حالة واجهة برمجة التطبيقات "خدمات ألعاب Play" هي مفعَّلة في قائمة واجهات برمجة التطبيقات المعروضة.
  5. في الشريط الجانبي على يمين الصفحة، اختَر التطبيقات المسجّلة.
  6. وسِّع قسم "معرّف عميل OAuth 2.0" وسجِّل ملف شهادة العميل المرجعي (SHA1).

إذا لم تتطابق هذه البصمة مع بصمة الشهادة من الخطوات السابقة، عليك إنشاء معرّف عملاء جديد باستخدام بصمة الشهادة الصحيحة. يجب إنشاء معرِّف العميل الجديد في Play Console، وليس في مشروع Google Cloud Platform.

التأكّد من تفعيل الحسابات التجريبية

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

  1. افتح Play Console وانتقِل إلى لعبتك.
  2. افتح علامة التبويب الاختبار.
  3. تأكَّد من أنّ الحساب الذي تحاول تسجيل الدخول باستخدامه مُدرَج في قائمة المختبِرين.

إذا لم يكن الحساب الذي تحاول تسجيل الدخول باستخدامه مُدرَجًا، أضِفه إلى القائمة وانتظِر بضع دقائق ثم حاوِل تسجيل الدخول مرة أخرى.

مشاكل Proguard

إذا كنت تستخدم Proguard وظهرت لك أخطاء في حزمة APK المشفَّرة، تحقَّق من مستوى واجهة برمجة التطبيقات المستهدَف على AndroidManifest.xml. احرص على ضبطه على 17 عامًا أو أكثر.

أسباب أخرى لمشاكل الإعداد

تحقّق من الأسباب الشائعة الأخرى للأخطاء:

  • إذا تم نشر لعبتك، تأكَّد من أنّ إعدادات اللعبة منشورة أيضًا (من الممكن نشر التطبيق بدون نشر إعدادات الألعاب). لإجراء ذلك، انتقِل إلى Google Play Console وانتقِل إلى تطبيقك، وتأكَّد من أنّ المربّع بجانب اسم اللعبة يشير إلى أنّه تم نشرها. إذا كانت الحالة تشير إلى أنّها في حالة أخرى، مثل "جاهزة للنشر" أو "جاهزة للاختبار"، انقر على المربّع واختَر نشر اللعبة.
  • إذا لم تتمكّن من نشر لعبتك، تأكَّد من أنّ خيار هذا التطبيق هو الأولوية لعمليات التثبيت الجديدة مفعَّل في واحد فقط من أرقام تعريف العملاء.

المستمعون المجهولون

لا تستخدِم مستمعين مجهولين. المستمعون المجهولون هم عمليات تنفيذ لواجهة مستمع يتم تعريفها مضمّنة، كما هو موضّح أدناه.

    ImageManager im = ...;

    // Anonymous listener -- dangerous:
    im.loadImage(new ImageManager.OnImageLoadedListener() {
        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }

لا يمكن الاعتماد على مستمعي البث المجهولين لأنّ حزمة تطوير البرامج (SDK) لـ "ألعاب Play" تحتفظ بهم كمراجع ضعيفة، ما يعني أنّه قد يستردّها أداة جمع المهملات قبل استدعائها. بدلاً من ذلك، عليك تنفيذ المستمع باستخدام عنصر دائم مثل Activity.

    public class MyActivity extends Activity
            implements ImageManager.OnImageLoadedListener {

        private void loadOurImages() {
            ImageManager im = ...;
            im.loadImage(this);
        }

        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }