تحديد مشاكل "خدمات ألعاب 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. وللحصول عليه، نفِّذ الأمر التالي:

    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. في الشريط الجانبي الأيمن، انقر على واجهات برمجة التطبيقات والمصادقة. تأكَّد من أنّ حالة واجهة برمجة التطبيقات لخدمات &quot;ألعاب Google Play&quot; هي مفعَّلة في قائمة واجهات برمجة التطبيقات المعروضة.
  5. في الشريط الجانبي الأيمن، اختَر التطبيقات المسجّلة.
  6. وسِّع قسم &quot;رقم تعريف العميل OAuth 2.0&quot; وانسخ رقم الملف المرجعي للشهادة (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) في &quot;ألعاب Play&quot; تحتفظ بها كمرجع ضعيف، ما يعني أنّ وحدة تجميع البيانات المهملة قد تحذفها من الذاكرة قبل استدعائها. بدلاً من ذلك، يجب تنفيذ متتبِّع باستخدام عنصر ثابت، مثل 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...
        }
    }