בדף הזה מוסבר איך לפתור בעיות שעשויות לצוץ במהלך פיתוח משחקים ל-Android באמצעות Google Play Games Services.
רישום
כדי לפתור בעיות במשחק, אפשר להפעיל רישום מפורט ביומן במכשיר באמצעות הפקודה adb shell
. לאחר מכן תוכלו להציג את ההודעות ביומן של Google Play Games Services באמצעות logcat.
הפעלת רישום
כדי להפעיל את הרישום ביומן במכשיר הבדיקה:
מחברים את המכשיר למכונה שבה מותקן Android SDK.
פותחים טרמינל ומריצים את הפקודה הבאה:
adb shell setprop log.tag.Games VERBOSE
מריצים את המשחק במכשיר ומנסים ליצור מחדש את הבעיה שרוצים לנפות.
צפייה ביומנים:
adb logcat
השבתת הרישום ביומן
כדי להשבית את הרישום המפורט ביומן של שירותי Play Games במכשיר ולחזור להתנהגות המקורית של הרישום ביומן, מריצים את הפקודה הבאה:
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:
בפלט. זוהי טביעת האצבע של האישור.
בשלב הבא, בודקים שכלי ה-build משתמש באישור הזה:
- יוצרים את קובץ ה-APK של המשחק באמצעות כלי ה-build, ומחתימים עליו באמצעות האישור הרצוי. מעתיקים את חבילת ה-APK שנוצרה לספרייה זמנית.
בספרייה הזמנית, מריצים את הפקודה הבאה כדי לפתוח את קובץ ה-APK.
unzip YourGame.apk
יצירת מפתח פרטי באמצעות קובץ אישור RSA:
keytool -printcert -file META-INF/CERT.RSA
לחלופין, אפשר ליצור את המפתח הפרטי באמצעות קובץ אישור DSA:
keytool -printcert -file META-INF/CERT.DSA
שימו לב לסדרת הספרות הקסדצימליות בשורה שכותרתה
SHA1:
.רצף הספרות הזה אמור להתאים לחתימת האצבע של האישור מהשלב הקודם. אם יש אי-התאמה, כלי ה-build או המערכת לא מוגדרים לחתום על האפליקציה באמצעות האישור. במקרה כזה, צריך לעיין במסמכי העזרה של סביבת ה-build כדי להבין איך להגדיר אותה בצורה נכונה ולנסות להיכנס שוב.
בשלב הבא, בודקים אם טביעת האצבע של האישור תואמת לטביעת האצבע שמוגדרת במזהה הלקוח. לשם כך:
- פותחים את Play Console ועוברים למשחק.
- בדף פרטי המשחק, גוללים לתחתית הדף ולוחצים על הקישור לפרויקט המקושר ב-Google Cloud Platform.
- בוחרים את הפרויקט הרצוי.
- בסרגל הצד שמימין, בוחרים באפשרות APIs & auth. מוודאים שהסטטוס של Google Play Games Services API הוא מופעל ברשימה של ממשקי ה-API המוצגים.
- בסרגל הצד שמימין, בוחרים באפשרות אפליקציות רשומות.
- מרחיבים את הקטע 'מזהה לקוח ב-OAuth 2.0' ומתעדים את טביעת האצבע של האישור (SHA1).
אם טביעת האצבע הזו לא תואמת לטביעת האצבע של האישור מהשלבים הקודמים, צריך ליצור מזהה לקוח חדש עם טביעת האצבע הנכונה של האישור. צריך ליצור את מזהה הלקוח החדש ב-Play Console, ולא בפרויקט ב-Google Cloud Platform.
בדיקה שחשבונות הבדיקה מופעלים
לפני פרסום המשחק, צריך להפעיל גם את החשבון שבו נוצר המשחק ב-Play Console בתור בודק. כדי לבדוק שההגדרה נכונה:
- פותחים את Play Console ועוברים למשחק.
- פותחים את הכרטיסייה בדיקה.
- בודקים אם החשבון שבו מנסים להיכנס נמצא ברשימת הבודקים.
אם החשבון שאליו אתם מנסים להיכנס לא מופיע ברשימה, מוסיפים אותו לרשימה, ממתינים כמה דקות ומנסים שוב להיכנס.
בעיות ב-Proguard
אם אתם משתמשים ב-Proguard ומוצגות שגיאות ב-APK המעורפל, עליכם לבדוק את רמת ה-API היעד ב-AndroidManifest.xml
. חשוב להגדיר את הגיל ל-17 ומעלה.
סיבות אחרות לבעיות בהגדרה
כדאי לבדוק אם יש סיבות נפוצות אחרות לשגיאות:
- אם המשחק שלך פורסם, צריך לבדוק אם גם ההגדרות של המשחק פורסמו (אפשר לפרסם את האפליקציה בלי לפרסם את הגדרות המשחק). כדי לעשות זאת, עוברים אל Google Play Console, עוברים לאפליקציה ובודקים שהתיבה לצד שם המשחק מסומנת, כלומר שהמשחק פורסם. אם הסטטוס הוא אחר, למשל 'מוכן לפרסום' או 'מוכן לבדיקה', לוחצים על התיבה ובוחרים באפשרות פרסום המשחק.
- אם אתם לא מצליחים לפרסם את המשחק, עליכם לוודא שבאחד מ-ID הלקוח מופעלת האפשרות This app is preferred for new installations.
מאזינים אנונימיים
אין להשתמש במאזינים אנונימיים. מאזינים אנונימיים הם הטמעות של ממשק מאזין שמוגדרות בשורה, כפי שמוצג בהמשך.
ImageManager im = ...;
// Anonymous listener -- dangerous:
im.loadImage(new ImageManager.OnImageLoadedListener() {
@Override
public void onImageLoaded(Uri uri, Drawable drawable) {
// ...code...
}
}
מאזינים אנונימיים לא מהימנים כי ערכת ה-SDK של Play Games שומרת עליהם כהפניות חלשות, כלומר יכול להיות שהם יוחזר על ידי מנהל האשפה לפני שהם יופעלו. במקום זאת, צריך להטמיע את ה-listener באמצעות אובייקט עקבי, כמו 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...
}
}