تحديد مشاكل "خدمات ألعاب 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

تعذرت المصادقة

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

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

يجب أن يحتوي 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. في الشريط الجانبي الأيمن، انقر على واجهات برمجة التطبيقات والمصادقة. تأكَّد من أنّ حالة واجهة برمجة التطبيقات لخدمات ألعاب Google 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...
        }
    }