تحديد مشاكل "خدمات ألعاب 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 وتظهر لك أخطاء في حزمة 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...
        }
    }