Memecahkan Masalah di Game Android

Halaman ini menjelaskan cara memecahkan masalah yang mungkin Anda alami saat mengembangkan game Android dengan Play Game SDK.

Tidak dapat login

Jika tidak dapat membuat pemain login ke game, pastikan Anda telah mengikuti petunjuk untuk membuat client ID dan mengonfigurasi layanan game terlebih dahulu. Jika Anda masih mengalami error login, periksa item berikut untuk memastikan game Anda disiapkan dengan benar.

Memeriksa tag metadata Anda

AndroidManifest.xml Anda harus berisi tag metadata game. Untuk memastikan bahwa tag metadata Anda sudah disiapkan dengan benar:

  1. Buka AndroidManifest.xml dan verifikasi bahwa file tersebut berisi tag meta-data seperti yang ditunjukkan di bawah:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. Cari definisi resource @string/app_id Anda. Definisi biasanya ditentukan dalam file XML yang terletak di direktori res/xml, misalnya res/xml/strings.xml atau res/xml/ids.xml.

  3. Pastikan nilai resource @string/app_id cocok dengan ID numerik aplikasi Anda. Nilai resource ini hanya boleh berisi angka. Contoh:

    <string name="app_id">123456789012</string>
    

Memeriksa nama paket Anda

Nama paket game Anda harus cocok dengan nama paket di client ID. Untuk memverifikasi nama paket:

  1. Buka AndroidManifest.xml dan verifikasi bahwa nama paket game Anda sudah benar. Nama paket adalah nilai atribut package dalam tag manifest.
  2. Verifikasi nama paket yang Anda berikan saat membuat client ID. Untuk memverifikasi nama paket di Konsol Google Play, buka Konsol Google Play dan klik entri yang sesuai dengan game Anda. Buka tab Linked Apps, lalu periksa daftar client ID. Harus ada aplikasi tertaut Android dalam daftar ini yang nama paketnya cocok dengan nama paket dalam AndroidManifest.xml Anda.
  3. Jika ada ketidakcocokan, buat client ID baru dengan nama paket yang benar, lalu coba login lagi.

Memeriksa sidik jari sertifikat

Sertifikat yang digunakan untuk menandatangani game harus cocok dengan sidik jari sertifikat yang terkait dengan client ID Anda. Untuk memverifikasinya, periksa sidik jari SHA1 sertifikat Anda terlebih dahulu:

  1. Cari file sertifikat dan dapatkan sidik jari SHA1. Untuk mendapatkan sidik jari SHA1, jalankan perintah ini:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Perhatikan urutan digit heksadesimal yang berlabel SHA1: dalam output. Itulah sidik jari sertifikat Anda.

Selanjutnya, periksa apakah alat build Anda menggunakan sertifikat ini:

  1. Buat APK game dari alat build dan tanda tangani dengan sertifikat yang diinginkan. Salin APK yang dihasilkan ke direktori sementara.
  2. Di direktori sementara, jalankan perintah berikut untuk mengekstrak APK Anda.

    unzip YourGame.apk
    
  3. Buat kunci pribadi menggunakan file sertifikat RSA:

    keytool -printcert -file META-INF/CERT.RSA
    

    Atau, Anda dapat membuat kunci pribadi menggunakan file sertifikat DSA:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. Perhatikan urutan digit heksadesimal pada baris yang berlabel SHA1:.

    Urutan digit ini harus cocok dengan sidik jari sertifikat Anda dari langkah sebelumnya. Jika terdapat ketidakcocokan, alat atau sistem build tidak dikonfigurasi untuk menandatangani aplikasi dengan sertifikat Anda. Dalam hal ini, lihat dokumentasi lingkungan build Anda untuk menentukan cara mengonfigurasinya dengan benar lalu coba login kembali.

Selanjutnya, periksa apakah sidik jari sertifikat cocok dengan sidik jari yang dikonfigurasi dalam client ID Anda. Untuk melakukannya:

  1. Buka Konsol Google Play, lalu buka game Anda.
  2. Di halaman Detail Game, scroll ke bagian bawah dan klik link ke project Google Cloud Platform yang tertaut.
  3. Di Google Cloud Platform, pilih project Anda.
  4. Di sidebar di sisi kiri, pilih API & auth Pastikan status API Layanan game Google Play AKTIF dalam daftar API yang ditampilkan.
  5. Di sidebar sebelah kiri, pilih Aplikasi terdaftar.
  6. Luaskan bagian Client ID OAuth 2.0 dan catat sidik jari sertifikat (SHA1).

Jika sidik jari ini tidak cocok dengan sidik jari sertifikat dari langkah sebelumnya, Anda harus membuat client ID baru dengan sidik jari sertifikat yang benar. Anda harus membuat client ID baru di Konsol Google Play, bukan di Google Cloud Platform.

Memastikan akun pengujian telah diaktifkan

Sebelum game dipublikasikan, akun yang membuat game di Konsol Google Play juga harus diaktifkan sebagai penguji. Untuk memeriksa apakah konfigurasi ini sudah benar:

  1. Buka Konsol Google Play, lalu buka game Anda.
  2. Buka tab Testing.
  3. Periksa apakah akun yang Anda gunakan untuk login ada dalam daftar penguji.

Jika akun yang ingin Anda gunakan untuk login tidak tercantum, tambahkan ke daftar, tunggu beberapa menit, lalu coba login lagi.

Masalah Proguard

Jika Anda menggunakan Proguard dan melihat adanya error pada APK yang di-obfuscate, periksa level API target pada AndroidManifest.xml Anda. Pastikan untuk menetapkannya ke 17 atau lebih tinggi.

Penyebab lain masalah penyiapan

Periksa penyebab umum kesalahan lainnya:

  • Jika game Anda dipublikasikan, pastikan setelan game juga dipublikasikan (Anda dapat memublikasikan aplikasi tanpa memublikasikan setelan game). Untuk melakukannya, buka Konsol Google Play dan pilih aplikasi Anda, lalu centang kotak di samping nama game yang menunjukkan bahwa game tersebut telah dipublikasikan. Jika ada dalam status lain, seperti "Ready to Publish" atau "Ready to Test", klik kotak dan pilih Publish Game.
  • Jika Anda tidak dapat memublikasikan game, pastikan salah satu client ID mengaktifkan opsi Aplikasi ini diutamakan untuk penginstalan baru.

Pemroses anonim

Jangan gunakan pemroses anonim. Pemroses anonim adalah implementasi antarmuka pemroses yang ditentukan secara inline seperti yang diilustrasikan di bawah ini.

    ImageManager im = ...;

    // Anonymous listener -- dangerous:
    im.loadImage(new ImageManager.OnImageLoadedListener() {
        @Override
        public void onImageLoaded(Uri uri, Drawable drawable) {
            // ...code...
        }
    }

Pemroses anonim tidak dapat diandalkan karena SDK Play Game mempertahankannya sebagai referensi yang lemah, yang berarti pemroses tersebut dapat diklaim kembali oleh pembersih sampah memori sebelum dipanggil. Sebagai gantinya, Anda harus menerapkan pemroses menggunakan objek persisten seperti 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...
        }
    }