Android ゲームの問題のトラブルシューティング

このページでは、Android の開発中に発生する可能性のある問題のトラブルシューティングの方法について説明します ゲームを開発できます。

ログインできません

プレーヤーをゲームにログインできない場合は、 クライアント ID を作成する手順と、 ゲームサービスを構成します。ログインが引き続き発生する場合 エラーが発生した場合は、以下の項目をチェックして、ゲームが正しく設定されていることを確認してください。

メタデータタグをチェックする

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 リソースの定義を見つけます。通常は、res/xml/strings.xmlres/xml/ids.xml など、res/xml ディレクトリにある XML ファイルで定義されます。

  3. @string/app_id リソースの値がアプリケーションの数値 ID と一致していることを確認します。このリソースの値には、数字のみを使用してください。例:

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

パッケージ名を確認する

ゲームのパッケージ名がクライアント ID のパッケージ名と一致している必要があります。パッケージ名を確認するには、次の手順を行います。

  1. AndroidManifest.xml を開いて、ゲームのパッケージ名が正しいことを確認します。パッケージ名は、manifest タグの package 属性の値です。
  2. クライアント ID の作成時に指定したパッケージ名を確認します。パッケージ名を確認するには、 Google Play Console にアクセスし、ゲームに対応するエントリをクリックします。 [リンク済みアプリ] タブに移動して、クライアント ID のリストを調べます。Android へのリンクが必要です。 このリスト内のパッケージ名が AndroidManifest.xml のパッケージ名と一致するアプリ。
  3. 不一致がある場合は、正しいパッケージ名で新しいクライアント ID を作成し、ログインを試します。 もう一度クリックします。

証明書フィンガープリントをチェックする

ゲームの署名に使用する証明書が証明書フィンガープリントと一致している必要があります 表示されます。これを確認するには、まず証明書の SHA1 フィンガープリントを確認します。

  1. 証明書ファイルを探して、SHA1 フィンガープリントを取得します。SHA1 フィンガープリントを取得するには、次のコマンドを実行します。

    keytool -exportcert -alias your-key-name -keystore /path/to/your/keystore/file -list -v
    
  2. 出力内で SHA1: というラベルが付加されている 16 進数のシーケンスをメモします。これが証明書のフィンガープリントです。

次に、ビルドツールがこの証明書を使用していることを確認します。

  1. ビルドツールでゲームの APK を生成し、必要な証明書を使用して署名します。生成された 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: というラベルが付加されている行の 16 進数のシーケンスをメモします。

    この数字のシーケンスが、前のステップでメモした証明書フィンガープリントと一致する必要があります。一致しない場合は、ビルドツールまたはシステムが、証明書を使用してアプリに署名するように構成されていません。その場合は、ビルド環境のマニュアルを参照して証明書の正しい構成方法を確認した後、再度ログインを試みてください。

次に、証明書フィンガープリントが、クライアント ID で構成されているフィンガープリントと一致するかどうかをチェックします。手順は次のとおりです。

  1. Google Play Console を開き、ゲームに移動します。
  2. [ゲームの詳細] ページで、下部までスクロールして、リンク済み Google Cloud Platform プロジェクトへのリンクをクリックします。
  3. Google Cloud Platform でプロジェクトを選択します。
  4. 左側にあるサイドバーで、[API と認証] を選択します。表示された API のリストで Google Play Games サービス API のステータスが [オン] になっていることを確認します。
  5. 左側にあるスライドバーで [登録済みアプリケーション] を選択します。
  6. [OAuth 2.0 クライアント ID] セクションを展開し、証明書フィンガープリント(SHA1)をメモします。

このフィンガープリントが、前の手順でメモした証明書のフィンガープリントと一致しない場合は、正しい証明書のフィンガープリントを使用して新しいクライアント ID を作成する必要があります。新しいクライアント ID は、Google Play Console ではなく、Google Play Console で作成する必要があります。 説明します。

テスト アカウントが有効になっていることを確認する

ゲームを公開する前に、Google Play Console でゲームを作成したアカウントが 有効にする必要があります。これが正しく構成されていることを確認するには:

  1. Google Play Console を開き、ゲームに移動します。
  2. [テスト] タブを開きます。
  3. ログインしようとしているアカウントがテスターのリストに含まれていることを確認します。

ログインに使用するアカウントがリストに含まれていない場合は、リストに追加し、数分待ってから再度ログインしてみてください。

Proguard の問題

Proguard を使用して難読化した APK でエラーが発生する場合は、AndroidManifest.xml のターゲット API レベルをチェックしてください。レベルは 17 以上に設定する必要があります。

その他の原因による設定関連の問題

その他のよくあるエラー原因がないか、次の項目をチェックします。

  • ゲームが公開されている場合は、ゲームの設定も公開されているかチェックします(ゲームの設定を公開せずにアプリが公開されている可能性があります)。これを行うには、 Google Play Console にアクセスしてアプリに移動し、ゲーム名の横にあるチェックボックスに あります。別の状態([公開の準備完了] や [テストの準備完了] など)になっている場合は、このボックスをクリックして [ゲームを公開する] を選択します。
  • ゲームを公開できない場合は、クライアント ID のいずれか 1 つのみで [このアプリは新たなインストールにおすすめです] オプションが有効となっているかチェックします。

匿名リスナー

匿名リスナーは使用しないでください。匿名リスナーは、以下に示すように、インラインで定義されるリスナー インターフェースの実装です。

    ImageManager im = ...;

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

匿名リスナーは、Play Games SDK が弱参照として維持するため、信頼性が低下し、呼び出される前にガベージ コレクタによって回収される可能性があります。代わりに、永続オブジェクトを使用してリスナーを実装してください。 (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...
        }
    }