تصف هذه الصفحة كيفية استكشاف الأخطاء وإصلاحها التي قد تواجهها أثناء في تطوير ألعاب Android باستخدام "خدمات ألعاب Google Play".
التسجيل
لتحديد المشاكل المتعلّقة بلعبتك وحلّها، يمكنك تفعيل التسجيل المطوَّل
على جهازك باستخدام الأمر adb shell
. يمكنك بعد ذلك عرض
سجلّ "خدمات ألعاب Google Play" للرسائل باستخدام أداة Logcat.
تمكين التسجيل
لتفعيل إمكانية تسجيل الدخول على جهاز الاختبار:
وصِّل الجهاز بجهاز تم تثبيت حزمة تطوير البرامج (SDK) لنظام التشغيل Android عليه.
افتح نافذة Terminal ونفِّذ الأمر التالي:
adb shell setprop log.tag.Games VERBOSE
تشغيل اللعبة على الجهاز وإعادة إظهار المشكلة وتصحيح الأخطاء.
عرض السجلات:
adb logcat
إيقاف التسجيل
لإيقاف التسجيل المطوَّل لـ "خدمات ألعاب Play" على جهازك للعودة إلى سلوك التسجيل الأصلي، شغِّل الأمر التالي:
adb shell setprop log.tag.Games INFO
تعذّر تسجيل الدخول
إذا لم تتمكن من تسجيل اللاعبين في لعبتك، عليك أولاً التأكّد من توفّر اتبعت التعليمات إنشاء معرِّفات العملاء أو إعداد خدمات الألعاب في حال استمرار ظهور أخطاء في تسجيل الدخول، راجِع العناصر التالية للتأكد من ذلك: أنّه تم إعداد لعبتك بشكل صحيح
التحقّق من علامات البيانات الوصفية
يجب أن يحتوي AndroidManifest.xml
على علامة بيانات وصفية للألعاب. للتحقق من أن
إعداد علامات البيانات الوصفية بشكلٍ صحيح:
افتح
AndroidManifest.xml
وتأكّد من أنّه يحتوي على العلامةmeta-data
كما هو موضّح أدناه:<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />
اعثر على تعريف مورد
@string/app_id
. يتم تحديدها عادةً في ملف XML موجودة في دليلres/xml
، على سبيل المثالres/xml/strings.xml
أوres/xml/ids.xml
.تأكَّد من أنّ قيمة المورد
@string/app_id
تتطابق مع رقم التعريف الرقمي لتطبيقك. يجب أن تحتوي قيمة هذا المورد على أرقام فقط. مثلاً:<string name="app_id">123456789012</string>
التحقّق من اسم الطرد
يجب أن يتطابق اسم حزمة اللعبة مع اسم الحزمة الوارد في معرِّف العميل. لإثبات صحة اسم الحزمة:
افتح "
AndroidManifest.xml
" وتأكَّد من صحة اسم حزمة لعبتك. الطرد هو قيمة السمةpackage
في العلامةmanifest
.تحقَّق من اسم الحزمة الذي قدّمته عند إنشاء معرِّف العميل. لإثبات الملكية اسم الحزمة في Google Play Console، انتقل إلى Play Console وانقر على الإدخال المناسب للعبتك.
انتقِل إلى علامة التبويب التطبيقات المرتبطة وافحص قائمة معرّفات العملاء. هناك أحد تطبيقات Android المرتبطة في هذه القائمة ويتطابق اسم حزمةه مع اسم الحزمة في
AndroidManifest.xml
. إذا كان هناك عدم تطابق، أنشئ معرِّف العميل باسم الحزمة الصحيح وحاوِل تسجيل الدخول مرة أخرى.
التحقّق من الملف المرجعي للشهادة
يجب أن تتطابق الشهادة التي وقّعت عليها لعبتك مع الملف المرجعي للشهادة المرتبط بمعرّف العميل الخاص بك. للتحقق من ذلك، عليك أولاً تحقَّق من الملف المرجعي لشهادة SHA1 لشهادتك على النحو التالي:
ابحث عن ملف الشهادة واحصل على ملف SHA1 المرجعي. للحصول على بصمة إصبع SHA1، يُرجى تشغيل الأمر التالي:
keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
دوِّن تسلسل الأرقام السداسية العشرية الذي يحمل الاسم
SHA1:
في الإخراج. هذا هو الملف المرجعي لشهادتك.
بعد ذلك، تحقق من أن أداة التصميم تستخدم هذه الشهادة:
- أنشِئ ملف APK الخاص باللعبة من خلال أداة التصميم ووقِّعه باستخدام الملف الذي تريده. الشهادة. انسخ حزمة APK التي تم إنشاؤها إلى دليل مؤقت.
في الدليل المؤقت، شغِّل الأمر التالي لفك ضغط حِزمة APK.
unzip YourGame.apk
إنشاء مفتاح خاص باستخدام ملف شهادة RSA:
keytool -printcert -file META-INF/CERT.RSA
بدلاً من ذلك، يمكنك إنشاء المفتاح الخاص باستخدام ملف شهادة DSA:
keytool -printcert -file META-INF/CERT.DSA
لاحِظ تسلسل الأرقام السداسية العشرية على السطر المُسمّى
SHA1:
.يجب أن يتطابق تسلسل الأرقام هذا مع الملف المرجعي لشهادة الاعتماد من الخطوة السابقة. وفي حال عدم التطابق، لن يكون نظام أو أداة التصميم التي تستخدمها لتوقيع تطبيقك باستخدام شهادتك. وفي هذه الحالة، يمكنك الرجوع إلى وثائق بيئة التصميم لتحديد كيفية تهيئة بشكل صحيح ومحاولة تسجيل الدخول مرة أخرى.
بعد ذلك، تحقَّق مما إذا كان الملف المرجعي للشهادة يتطابق مع الملف المرجعي الذي تم إعداده في معرف العميل الخاص بك. ولإجراء ذلك:
- افتح Play Console وانتقِل إلى لعبتك.
- في صفحة تفاصيل اللعبة، انتقِل للأسفل وانقر على الرابط الذي يؤدي إلى المرتبط بمشروع Google Cloud Platform.
- اختَر مشروعك.
- في الشريط الجانبي على اليمين، حدد واجهات برمجة التطبيقات المصادقة تأكد من أن حالة واجهة برمجة التطبيقات "لخدمات ألعاب Google Play" مفعّلة في قائمة واجهات برمجة التطبيقات المعروضة.
- في الشريط الجانبي على يمين الصفحة، اختَر التطبيقات المسجَّلة.
- وسِّع قسم معرِّف عميل OAuth 2.0 وراجِع الشهادة. بصمة الإصبع (SHA1).
وإذا لم يتطابق هذا الملف المرجعي مع الملف المرجعي لشهادتك من في الخطوات السابقة، عليك إنشاء معرِّف عميل جديد باستخدام الشهادة الصحيحة بصمة الإصبع. عليك إنشاء معرِّف العميل الجديد في Play Console، وليس في مشروع Google Cloud Platform.
التأكّد من تفعيل الحسابات الاختبارية
قبل نشر لعبة، يجب أن يكون الحساب الذي أنشأ اللعبة في يجب أيضًا تفعيل Play Console كمختبِر. للتحقق من أن تم إعداد ذلك بشكل صحيح:
- افتح Play Console وانتقِل إلى لعبتك.
- افتح علامة التبويب اختبار.
- تأكَّد من أنّ الحساب الذي تحاول تسجيل الدخول باستخدامه مُدرَج في قائمة للمختبِرين.
إذا لم يكن الحساب الذي تحاول تسجيل الدخول باستخدامه مدرجًا، أضِفه إلى القائمة وانتظِر بضع دقائق. وحاول تسجيل الدخول مرة أخرى.
مشاكل 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...
}
}