تحديد المشاكل وحلّها في لعبة Android

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

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

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

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

يجب أن يحتوي 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، ثم انتقِل إلى Google Play Console وانقر على الإدخال المناسب للعبتك. انتقِل إلى علامة التبويب التطبيقات المرتبطة وافحص قائمة معرّفات العملاء. يجب أن يكون هناك رابط Android تطبيق في هذه القائمة يتطابق اسم حزمته مع اسم الحزمة في AndroidManifest.xml.
  3. في حال عدم التطابق، أنشِئ معرِّف عميل جديدًا باستخدام اسم الحزمة الصحيح وحاوِل تسجيل الدخول. مرة أخرى.

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

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

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

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

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

  1. افتح Google 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...
        }
    }