Android oyunlarda Play Oyun Hizmetleri ile ilgili sorunları giderme

Bu sayfada, Google Play Games Services ile Android oyunları geliştirirken karşılaşabileceğiniz sorunların nasıl giderileceği açıklanmaktadır.

Günlük kaydı

Oyununuzla ilgili sorunları gidermek için adb shell komutunu kullanarak cihazınızda ayrıntılı günlük kaydını etkinleştirebilirsiniz. Ardından, logcat'i kullanarak Google Play Games Hizmetleri günlük mesajlarını görüntüleyebilirsiniz.

Günlük kaydını etkinleştir

Test cihazınızda günlük kaydını etkinleştirmek için:

  1. Cihazı, Android SDK'sının yüklü olduğu bir makineye bağlayın.

  2. Bir terminal açıp şu komutu çalıştırın:

    adb shell setprop log.tag.Games VERBOSE
  3. Oyununuzu cihazda çalıştırın ve hata ayıklamaya çalıştığınız sorunu yeniden oluşturun.

  4. Günlükleri görüntüleme:

    adb logcat

Günlük kaydını devre dışı bırakma

Cihazınızda Play Games Hizmetleri için ayrıntılı günlük kaydını devre dışı bırakmak ve orijinal günlük kaydı davranışına dönmek üzere aşağıdaki komutu çalıştırın:

adb shell setprop log.tag.Games INFO

Oturum açılamadı

Oyuncuların oyununuzda oturum açmasını sağlayamıyorsanız öncelikle istemci kimliklerinizi oluşturma ve oyun hizmetlerini yapılandırma talimatlarını uyguladığınızdan emin olun. Hâlâ oturum açma hatalarıyla karşılaşıyorsanız oyununuzun doğru şekilde ayarlandığından emin olmak için aşağıdaki öğeleri kontrol edin.

Meta veri etiketlerinizi kontrol etme

AndroidManifest.xml, oyun meta verisi etiketi içermelidir. Meta veri etiketlerinizin doğru şekilde ayarlandığını doğrulamak için:

  1. AndroidManifest.xml dosyanızı açın ve aşağıda gösterildiği gibi bir meta-data etiketi içerdiğini doğrulayın:

    <meta-data android:name="com.google.android.gms.games.APP_ID"
        android:value="@string/app_id" />
    
  2. @string/app_id kaynağınızın tanımını bulun. Genellikle res/xml dizininde bulunan bir XML dosyasında (ör. res/xml/strings.xml veya res/xml/ids.xml) tanımlanır.

  3. @string/app_id kaynağının değerinin, uygulamanızın sayısal kimliğiyle eşleştiğini doğrulayın. Bu kaynağın değeri yalnızca rakam içermelidir. Örnek:

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

Paket adınızı kontrol edin

Oyununuzun paket adı, müşteri kimliğinizdeki paket adıyla eşleşmelidir. Paket adını doğrulamak için:

  1. AndroidManifest.xml dosyanızı açın ve oyununuzun paket adının doğru olduğundan emin olun. Paket adı, manifest etiketindeki package özelliğinin değeridir.

  2. Müşteri kimliğinizi oluştururken belirttiğiniz paket adını doğrulayın. Google Play Console'da paket adını doğrulamak için Play Console'a gidip oyununuza karşılık gelen girişi tıklayın.

  3. Bağlı Uygulamalar sekmesine gidin ve istemci kimlikleri listesini inceleyin. Bu listede, paket adı AndroidManifest.xml'ünüzdeki paket adıyla eşleşen bir Android bağlı uygulaması olmalıdır. Eşleşme yoksa doğru paket adıyla yeni bir istemci kimliği oluşturun ve tekrar oturum açmayı deneyin.

Sertifika parmak izini kontrol etme

Oyununuzu imzaladığınız sertifika, müşteri kimliğinizle ilişkili sertifika parmak izini karşılamalıdır. Bunu doğrulamak için öncelikle sertifikanızın SHA1 parmak izini aşağıdaki gibi kontrol edin:

  1. Sertifika dosyanızı bulun ve SHA1 parmak izini alın. SHA1 parmak izini almak için şu komutu çalıştırın:

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. Çıktıda SHA1: olarak etiketlenen on altılık basamak dizisini not edin. Bu, sertifikanızın parmak izidir.

Ardından, derleme aracınızın bu sertifikayı kullanıp kullanmadığını kontrol edin:

  1. Derleme aracınızdan oyununuzun APK'sını oluşturun ve istediğiniz sertifikayla imzalayın. Oluşturulan APK'yı geçici bir dizine kopyalayın.
  2. APK'nızın sıkıştırmasını açmak için geçici dizinde aşağıdaki komutu çalıştırın.

    unzip YourGame.apk
    
  3. RSA sertifika dosyası kullanarak özel anahtar oluşturun:

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

    Alternatif olarak, DSA sertifika dosyası kullanarak özel anahtarı oluşturabilirsiniz:

    keytool -printcert -file META-INF/CERT.DSA
    
  4. SHA1: etiketli satırdaki onaltılık basamak dizisini not edin.

    Bu basamak dizisi, önceki adımdaki sertifika parmak izinizle eşleşmelidir. Eşleşme yoksa derleme aracınız veya sisteminiz, uygulamanızı sertifikanızla imzalayacak şekilde yapılandırılmamıştır. Bu durumda, nasıl doğru şekilde yapılandıracağınızı belirlemek için derleme ortamınızın dokümanlarına bakın ve tekrar oturum açmayı deneyin.

Ardından, sertifika parmak izinin istemci kimliğinizde yapılandırılan parmak iziyle eşleşip eşleşmediğini kontrol edin. Bunu yapmak için:

  1. Play Console'u açıp oyununuza gidin.
  2. Oyun Ayrıntıları sayfasında aşağı kaydırın ve bağlı Google Cloud Platform projesinin bağlantısını tıklayın.
  3. Projenizi seçin.
  4. Soldaki kenar çubuğundan API'ler ve kimlik doğrulama'yı seçin. Gösterilen API listesinde Google Play Games Services API durumunun AÇIK olduğundan emin olun.
  5. Soldaki kenar çubuğunda Kayıtlı uygulamalar'ı seçin.
  6. OAuth 2.0 İstemci Kimliği bölümünü genişletin ve sertifika parmak izini (SHA1) not edin.

Bu parmak izi, önceki adımlardaki sertifikanızın parmak iziyle eşleşmiyorsa doğru sertifika parmak iziyle yeni bir istemci kimliği oluşturmanız gerekir. Yeni istemci kimliğini Google Cloud Platform projesinde değil, Play Console'da oluşturmanız gerekir.

Test hesaplarının etkinleştirildiğinden emin olun

Bir oyun yayınlanmadan önce, oyunu Play Console'da oluşturan hesabın test kullanıcısı olarak da etkinleştirilmesi gerekir. Bunun doğru yapılandırıldığından emin olmak için:

  1. Play Console'u açıp oyununuza gidin.
  2. Test sekmesini açın.
  3. Oturum açmaya çalıştığınız hesabın test kullanıcıları listesinde olup olmadığını kontrol edin.

Oturum açmaya çalıştığınız hesap listede yoksa listeye ekleyin, birkaç dakika bekleyin ve tekrar oturum açmayı deneyin.

Proguard sorunları

Proguard kullanıyorsanız ve kodu karartılmış APK'da hata görüyorsanız AndroidManifest.xml'inizdeki hedef API seviyesini kontrol edin. Bu değeri 17 veya daha yüksek bir değere ayarladığınızdan emin olun.

Kurulum sorunlarının diğer nedenleri

Hataların diğer yaygın nedenlerini kontrol edin:

  • Oyununuz yayınlandıysa oyun ayarlarının da yayınlandığından emin olun (uygulamayı oyun ayarlarını yayınlamadan yayınlamak mümkündür). Bunu yapmak için Google Play Console'a gidip uygulamanıza gidin ve oyunun adının yanındaki kutunun yayınlandığını gösterdiğinden emin olun. "Yayınlanmaya Hazır" veya "Teste Hazır" gibi başka bir durumda olduğunu gösteriyorsa kutuyu tıklayıp Oyunu Yayınla'yı seçin.
  • Oyununuzu yayınlayamıyorsanız istemci kimliklerinden birinde Bu uygulama yeni yüklemeler için tercih edilir seçeneğinin etkinleştirildiğinden emin olun.

Anonim dinleyiciler

Anonim dinleyiciler kullanmayın. Anonim dinleyiciler, aşağıda gösterildiği gibi satır içi olarak tanımlanan bir dinleyici arayüzünün uygulamalarıdır.

    ImageManager im = ...;

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

Play Games SDK'sı anonim dinleyicileri zayıf referanslar olarak koruduğu için bu dinleyiciler güvenilir değildir. Bu, çağrılmadan önce çöp toplayıcı tarafından geri alınabilecekleri anlamına gelir. Bunun yerine, dinleyiciyi Activity gibi kalıcı bir nesne kullanarak uygulamanız gerekir.

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