פתרון בעיות במשחק Android

כאן מוסבר איך פותרים בעיות שאולי תיתקלו בהן במהלך פיתוח משחקים ל-Android באמצעות Play Games SDK.

אין אפשרות להיכנס

אם אתם לא מצליחים להכניס את השחקנים למשחק, ודאו קודם שפעלתם לפי ההוראות ליצירת מזהי הלקוחות ולהגדרת שירותי המשחקים. אם עדיין תיתקלו בשגיאות כניסה, בדקו את הפריטים הבאים כדי לוודא שהמשחק מוגדר כראוי.

בדיקת תגי המטא-נתונים שלך

השדה 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: בפלט. זוהי טביעת האצבע של האישור שלך.

לאחר מכן, בודקים שכלי ה-build משתמש באישור הזה:

  1. תוכלו ליצור את ה-APK של המשחק מכלי ה-build ולחתום עליו באמצעות האישור הרצוי. מעתיקים את ה-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:.

    הרצף הזה של הספרות צריך להתאים לטביעת האצבע של האישור מהשלב הקודם. אם יש חוסר התאמה, כלי או מערכת ה-build לא מוגדרים לחתימה על האפליקציה באמצעות האישור. במקרה כזה, מומלץ לקרוא את התיעוד של סביבת ה-build כדי להבין איך להגדיר אותו נכון ולנסות להיכנס שוב.

לאחר מכן, בדקו אם טביעת האצבע של האישור תואמת לטביעת האצבע שהוגדרה במזהה הלקוח שלכם. לשם כך:

  1. פותחים את Google Play Console ועוברים למשחק.
  2. בדף פרטי המשחק, גוללים למטה ולוחצים על הקישור לפרויקט המקושר ב-Google Cloud Platform.
  3. בוחרים את הפרויקט ב-Google Cloud Platform.
  4. בסרגל הצד שמימין, בוחרים באפשרות ממשקי API ואימות. ודאו שסטטוס ה-API של שירותי Google Play Games מופעל ברשימה המוצגת של ממשקי ה-API.
  5. בסרגל הצד שמימין, בוחרים באפשרות אפליקציות רשומות.
  6. מרחיבים את הקטע 'מזהה לקוח OAuth 2.0' ומציינים את טביעת האצבע של האישור (SHA1).

אם טביעת האצבע הזו לא תואמת לטביעת האצבע של האישור מהשלבים הקודמים, תצטרכו ליצור Client ID חדש עם טביעת האצבע הנכונה של האישור. עליכם ליצור את מזהה הלקוח החדש ב-Google Play Console, ולא ב-Google Cloud Platform.

בדיקה שחשבונות הבדיקה מופעלים

לפני פרסום המשחק, עליכם גם להפעיל כחשבון את החשבון שיצר את המשחק ב-Google Play Console. כדי לוודא שהגדרה זו נכונה:

  1. פותחים את Google Play Console ועוברים למשחק.
  2. פותחים את הכרטיסייה בדיקה.
  3. בודקים אם החשבון שאיתו מנסים להיכנס מופיע ברשימת הבודקים.

אם החשבון שבאמצעותו ניסיתם להיכנס לא מופיע ברשימה, יש להוסיף אותו לרשימה, לחכות מספר דקות ולנסות להיכנס שוב.

בעיות שקשורות להגנה

אם אתם משתמשים ב-ProGuard ואתם רואים שגיאות ב-APK המעורפל, בדקו את רמת ה-API לטירגוט ב-AndroidManifest.xml. יש להגדיר את הפרמטר ל-17 ומעלה.

סיבות אחרות לבעיות בהגדרה

בודקים אם יש סיבות נפוצות אחרות לשגיאות:

  • אם המשחק מתפרסם, צריך לבדוק גם שהגדרות המשחק פורסמו (אפשר לפרסם את האפליקציה בלי לפרסם את הגדרות המשחק). לשם כך, עוברים אל Google Play Console ועוברים לאפליקציה, ומוודאים שהתיבה לצד שם המשחק מציינת שהיא פורסמה. אם הסטטוס שלו הוא 'מצב פרסום', למשל 'מוכן לפרסום' או 'מוכן לבדיקה', לוחצים על התיבה ובוחרים באפשרות פרסום המשחק.
  • אם לא ניתן לפרסם את המשחק, בודקים שהאפשרות אפליקציה זו מועדפת עבור התקנות חדשות מופעלת בדיוק באחד ממזהי הלקוח.

מאזינים אנונימיים

אין להשתמש במאזינים אנונימיים. מאזינים אנונימיים הם הטמעות של ממשק listener שמוגדר בתוך השורה, כפי שמתואר בהמשך.

    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...
        }
    }