昨日のGoogle I/O基調講演の直後に、ゲームサービスをアプリの1つに統合するためにAndroid SDKを更新しました。
これまでにやったこと:
BaseGameActivity
およびGameHelper
をプロジェクトに追加しました( from GitHub )BaseGameActivity
を拡張し、com.google.Android.gms.common.SignInButton
を追加しましたまた、ゲームメタデータと、もちろん、いくつかの成果も設定しました。開発コンソールには、リリースの準備ができていることが記載されています。ログインフローと成果をテストするために、テストユーザーとして2つのGoogle+アカウントを追加しました。
しかし、SignInButtonをテストすると、アラートがポップアップ表示されます:Unknown error。 logcatは次のとおりです。
ERROR/Volley: il.a: Unexpected response code 403 for https://www.googleapis.com/games/v1/players/me
ERROR/SignInIntentService: Access Not Configured
ERROR/LoadSelfFragment: Unable to sign in - application does not have a registered client ID
ProGuardと適切な証明書を使用して、実稼働モードでアプリケーションを構築しました。
私は何か見落としてますか?
これまでに試したことの概要を以下に示します。何も助けませんでした。
問題は、テスト用アカウントとは関係ありませんセクション。テストが有効になっていないアカウントを使用すると、別のエラーメッセージが表示されます。
E/GameAgent: Unable to retrieve 1P application 547xxxxxx457 from network
E/CheckGameplayAcl: Unable to load metadata for game
Hartokのソリューションは、この問題の解決に大いに役立ちました。以前に Google APIコンソール にアクセスしたことはありません。リンクされたアプリをゲームから削除したり、(Dev Consoleで)ゲームを削除した場合でも、OAuthクライアントIDは削除されないことを知っておくことが重要です。手動で削除します。
自動選択されたSHA1フィンガープリントは(常に)間違っています!独自に検索する必要があります。
keytool -exportcert -alias <your-alias> -keystore <path-to-keystore> -list -v
(正しく)リンクされたアプリの新しいクライアントIDは、以前の12桁ではなく、89xxxxxxxx73-2u6mXXXXXXXXXXXXXXXXXXX8903.apps.goo...
のように見えました。最後に、ダッシュと英数字を除外し、12桁のみを使用する必要があることがわかりました。
この問題を修正しました。
私の場合、アプリ(まだ公開されていない)をGoogle Playゲームサービスプロジェクトにリンクしたとき、Google Playによって自動選択された証明書フィンガープリントは適切ではありませんでした。
これを修正するために、 Google APIコンソール でアプリのクライアントIDを削除し、アプリのリンクを解除してから、適切な証明書フィンガープリントで再リンクしました。このフィンガープリントは、Eclipseでアプリをエクスポートするときに表示されます(ADTプラグインが最新の場合)。
それが役に立てば幸い。
この問題を修正しようとして長い2週間後、私はこの問題を解決するための手順を作成し、同じ問題に苦しんでいるすべての人と共有することにしました。これはゲームを公開せずに行われます。テストに使用されます。公開時期が来たら、アプリの公開に使用した手順を共有し、Google Playゲームサービスで動作することを確認します。
私がやろうとしていたことは、サインイン後に何をすべきかについてアクションなしでGoogleサインインボタンを使用してサインインすることであることに注意してください。また、Googleプレイの例のBaseGameUtilsをライブラリとして使用していること、およびIDEこれをすべて行うための選択肢はEclipseでした。
以下は、Eclipseを使用した手順です。
1-BaseGameUtilsをEclipseワークスペースのライブラリとしてインポートし、インポート後にエラーが発生しないことを確認します。エラーが発生した場合、次の手順を実行します。
a-プロジェクトエクスプローラーでBaseGameUtilプロジェクトを右クリックします
b =クリックJavaビルドパス
cをクリックしてそこから外部jarを追加し、SDKの場所に移動して、Google-Play-services.jarを見つけます。
d-それを選択し、[OK]をクリックします---> JARおよびクラスフォルダーウィンドウにjarが追加されます。
ライブラリの右側の[注文とエクスポート]タブに移動し、[Androidプライベートライブラリ]と[Android依存関係]がオンになっていることを確認し、google-play-services.jarが選択されていることを確認します。
2-使用するアプリでインポートしたBaseGameUtilityを正しく参照していることを確認してください。「簡単なhello worldアプリケーションを作成してこれをテストできます」、hello worldアプリケーションでBaseGameUtilityを次のように参照します。
(hello worldとBaseGameUtilの両方が同じドライブにあり、2つのドライブが機能しないことを確認してください)
プロジェクトエクスプローラーの右側にあるhello worldアプリケーションを右クリックします。
b =クリックJavaビルドパス
ライブラリのcクリック
d- Android support-v4を外部または内部ソースから必要に応じて追加します(必須ではありません)
e-クラスフォルダーの追加をクリックしてベースゲームutils .jardを追加します->次にBaseGameUtilProjectを選択します---次に/ binフォルダーを選択します-これはアプリケーションにインポートする必要があります
必要に応じて、外部ソースからgoogle-play-services.jarを追加する
g-in "order and export"では、次の項目が選択されていることを確認します---> "Android Private Libraries、Android dependancies、BasegameUtils.jar、GooglePlayGameServices.jar"と、デフォルトで選択される通常のSRCおよびGEN。
3-今Javaファイルhelloworld.Javaで、メイン画面に必要なインポートがすべてあることを確認してから、BaseGameUtilを拡張し、プロジェクトがViewOnClickListenerを実装していることを確認します。
4- Androidマニフェストを編集して以下を含めます:
<meta-data Android:name="com.google.Android.gms.games.APP_ID"
Android:value="@string/app_id" />
そして
<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>
5-リソースにids.xmlファイルがあり、作成後にアプリケーションIDを含めるようにします。
<string name="app_id"></string>
後でアプリケーションIDを配置する必要があるため、ここでは空白のままにしておくことができます
開発者コンソールでこのアプリケーションを追加する前に、Eclipseにあるデバッグキーを6-IDE。
a-ウィンドウをクリックb- select Android c-Clickビルドd- SHA1フィンガープリントをコピーして、デベロッパーコンソールでアプリを作成するときに使用するように保持します。
7-開発者コンソールでゲームを作成し、手順6で取得したSHA1を使用します。
8-手順5で強調表示されたids.xmlにアプリケーションIDを配置します
9-値を再確認し、開発者コンソールとマニフェストファイルの間でパッケージ名がすべて正しいことを確認します。
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
**package="com.helloword.check"**
Android:versionCode="1"
Android:versionName="1.0" >
10-完了したら、開発者コンソールのアプリケーションが、keytoolを使用して開発者コンソールで割り当てられたSHA1と一致することを確認します。 これは、把握するために2週間かかったステップです
a- hello worldプロジェクトのbinフォルダーからアプリケーションAPKを見つけ、別の場所にコピーして、後でキーツールでIDを確認します
キーツールをb-locateします->通常、コンピューターのJavaフォルダーの下、私の場合はC:\ Program Files\Java\jdk1.7.0_09\jre\binの下にあります
c-一時的な場所でapkを抽出します
d-次のコマンドを実行します
keytool -printcert -file "TempLocation\Meta-INF\CERT.RSA"
sHA1およびSHA256とともにMD5を取得します
SHA1が開発者コンソールにあるものと一致することを確認してください。
11-開発者コンソールからSHA1を確認する方法は次のとおりです。
a-ゲームサービスに移動します
b-このケースではゲームの名前をクリックしますhelloWorld
c-「API Console Project」までスクロールします
d-「このゲームは、helloworldというAPIコンソールプロジェクトにリンクされています」と表示されます。
e- helloworldはハイパーリンクをクリックする必要があります。
f-これはGoogle APisコンソールを開きます
g- APconsoleでAPI Accessをクリック
h-「インストールされたアプリケーションのクライアントID」までスクロールダウンし、SHA1がステップ10で以前にkeytoolから生成されたものと同じであることを確認します。 (一致しない場合は、開発者コンソールからゲームを削除し、正しいSHA1で再作成する必要があります) "Google APIコンソールからSHA1を変更しないようにしてください。これにより問題が発生します。
パッケージ名がAndroidマニフェストで同じパッケージ名であることを確認します。つまり、パッケージ名が記載されているすべての場所で、「インストール済みアプリケーションのクライアントID」私のマニフェストの4行目のものと一致しなかった場合)
これで、Google Playゲームサービスを使用してサインインをテストできるようになります。
同じ問題があった。私の解決策は、同じパッケージをDev Consoleで2回リンクすることでした。1つ目は自分の証明書からのSHA1フィンガープリントを使用し、2つ目はデバッグキーSHA1を使用しました。
私はこれの前にどちらか一方だけを使用しようとしましたが、どちらにも機能しませんでした。
ステップ3では、OAuth 2.0クライアントID を生成します。具体的には、次のような警告が表示されます。
警告:Google APIコンソールを直接開き、そのページにクライアントIDを手動で追加しないでください。これを行うと、ゲームサービスにリクエストを送信するときにエラーが発生する場合があります。
ですから、私の経験では、ガイドに忠実に従う必要がありました: Google Play Developer ConsoleでのGoogle Playゲームサービスのセットアップ
私はこの問題とたくさん戦っていました。 Google APIコンソールの変更は、OAuthクライアントID-触れないでください。私にとって唯一の解決策は、新しいゲームサービスを作成し、署名されたapkを通常の(デバッグではなく)キーに接続することです) apkを任意のキーで追加した後、別のキーでもう一度追加しようとすると機能しません。ゲームを削除しても機能しません。googleはパッケージ名を記憶します。apkパッケージ名を変更してみてください(もちろん最良のアイデアではありません)、もう一度試してみてください。しかし、常にうまくいくとは限りません。
したがって、この問題が発生したら、apkパッケージ名を変更して新しいゲームサービスを作成するのが最善の解決策です-これは常に機能します-ゲームサービス名に注意してください-以前に使用した名前にしないでください-それすべてを台無しにします。
このサービスで発生したいくつかの問題から、最も面白いのは、ゲームサービスに接続されているapkがありますが、その中にリストされておらず、エラーのために追加できないことです:このクライアントIDはグローバルに一意であり、既に使用されています-クライアントIDはOAuth IDではありません-削除できません-そのようなオプションはありません-そしておそらくこれはここで得たものの根本的な問題です。
メタデータに入力するIDが、クライアントIDではなくアプリIDであることを確認してください。また、ハードコーディングすることはできません。これは文字列である必要があるため、リソースで指定し、マニフェストで参照する必要があります。
詳細についてはこちらをお読みください:
https://developers.google.com/games/services/console/enabling#c_specify_client_id_settings
注:Androidの場合、完全なクライアントIDをアプリケーションに含める必要はありません。完全なクライアントIDはアプリケーションIDから自動的に取得されるためです。
同様の問題が発生しています。このページは2013年5月30日に更新されました。
https://developers.google.com/games/services/Android/troubleshooting
それは私たちの一部を助けるかもしれません。
アルファテスト用にAPKを既に公開していたので、私にとってうまくいったトリックはゲームサービスの構成を公開することでした。
詳細については、トラブルシューティングの「その他の原因」の段落を参照してください https://developers.google.com/games/services/Android/troubleshooting
Sachin Chavanがついに解決したおかげで、問題は次のとおりでした。
1。 Google Playは間違ったsha1を取りました。
2。 Google Developer Consoleから追加しようとしました-動作しませんでした。
Sachin Chavanの投稿とリンクを確認した後、Google Play Consoleから同じアプリを複数回リンクできることがわかりました。 エイリアスSHA1を次のように使用しました。
keytool -exportcert \
-alias <your-key-name> \
-keystore <path-to-production-keystore> \
-list -v
とデバッグSHA1:
keytool -exportcert \
-alias androiddebugkey \
-keystore <path-to-debug-keystore> \
-list -v
アプリをさらに2回リンクしました。1回目はエイリアスSHA1を入力し、2回目はデバッグSHA1を入力しました、多くのエラーの後、それが解決しました(太字の段階)。
チェックリストは次のとおりです。
一般的な問題は、 'app_id'リソースIDの競合です。たとえば、Facebook SDKを使用している場合、同じ名前のキーを使用している可能性があります。 (BaseGameUtilsライブラリは、チェックしたソースコードで「app_id」と参照しているため、このプロジェクトに割り当てられた「app_id」を保持します)。
ドキュメントは「Google Developers Console」を参照していますが、スマートにプレイせず、そこからクライアントIDを追加しようとします。ただし、最後にはクライアントIDもそこにあります。簡単に誤読される可能性のある小さなメモがあります。
新しいクライアントIDは、Google Developers Consoleではなく、Google Play Developer Consoleで作成する必要があります。
これはすべてをカバーすると思う。ほとんどの人はGoogle Developer Consoleで見栄えがよく、ほとんどの人はtrapに陥るだろうが、実際にはおそらく =ステップ3および4上記を逃した。
Hartokのアプローチは私にも役立ちましたが、「Google APIコンソールからプロジェクトを削除する必要があるかもしれません。」これは十分に聞こえますが、少なくとも私にとってはそうではありません。 Googleには、APIコンソールに「削除の取り消し」機能がほとんどありません。すべてを単純に復元することができます。つまり、SHA-1キーは保存されますが、deleted(?)のフラグが立てられます。ブロックされたデバッグキーを再び使用するために私が働いたのは、すべてのテストプロジェクトの削除を取り消し、すべての削除されたプロジェクトから「API Access」オプション内のすべてのOAuth Keys 、その後、デバッグキーを再び使用できるようになりました。
ガイ、テスト用にアカウントを正しく設定しましたか?
https://developers.google.com/games/services/console/testpub#enabling_accounts_for_testing を参照してください
ゲームが未公開の状態にある場合、テスト用のアクセスを許可するユーザーアカウントをホワイトリストに登録する必要があります。そうしないと、ゲームサービスエンドポイントにアクセスしようとしたときに、テスターがOAuthと404エラーに遭遇します。
これは私にとって行方不明のステップでした。その後、私はこれらのエラーをもう受け取りませんでした:
E/GameAgent:ネットワークから1Pアプリケーション547xxxxxx457を取得できません
E/CheckGameplayAcl:ゲームのメタデータをロードできません
私の場合、AndroidManifest.xmlでパッケージ名を変更するのを忘れました。それがすべてでした。これを最初に確認する必要があると思います。
私にとってデバッグ署名は機能していますが、署名されていません; /これについてGoogleに連絡できますか?私は一日中それを費やしました; /「このクライアントIDに関連付けられたリンク済みアプリはありません」というメッセージが表示されますが、両方とも適切なプロジェクトの下でGoogle Apiにあります。
また、開発者コンソールで同じapp_IDを指す2つのリンク済みアプリと公開済みアプリを誤って公開していますが、両方とも公開済みで削除できません。
これを試してください:
すでにそれを行っている場合は、この最も重要な手順に従ってください。
6-同じキーストアでアプリをエクスポートし、デバイス(Googleに登録されたテスターIDとしてログインしている)にインストールします。
これで、間違いなくGoogleリアルタイムサーバーにアクセスできるようになります。
まだ私のために働いていません。 Googleは、Google Playゲームサービスを完全にリセットし、段階的に統合しました。それでも私は登録済みのGoogleクライアントIDを持っていないと述べました。 Google Playゲームサービスを作成するのに3年かかることを考えると、かなり失敗です。
最後に、@ googlemail.comのアカウントは認識されません。アチーブメントのIDをエクスポートすることはできません(40個のアチーブメントがある場合、htmlを超えてコピーする必要があり、非常に苦痛です)。
05-22 00:35:57.914:I/dqi(11166):要求の処理中にI/O例外(org.Apache.http.NoHttpResponseException)がキャッチされました:ターゲットサーバーが応答に失敗しました05-22 00:35:57.914:I/dqi(11166):再試行リクエスト05-22 00:35:58.135:E/Volley(11166):[506] il.a:https://www.googleapis.com/games/v1/の予期しない応答コード403 player/me 05-22 00:35:58.195:E/Volley(11166):[506] il.a:https://www.googleapis.com/games/v1/players/me 05-の予期しない応答コード403 22 00:35:58.205:E/SignInIntentService(11166):設定されていないアクセス05-22 00:35:58.205:E/SignInIntentService(11166):aol 05-22 00:35:58.205:E/SignInIntentService(11166): at ajy.a(SourceFile:108)05-22 00:35:58.205:E/SignInIntentService(11166):at abm.a(SourceFile:213 05-22 00:35:58.205:E/SignInIntentService(11166):at abm.a(SourceFile:194)05-22 00:35:58.205:E/SignInIntentService(11166):at aav.a(SourceFile:486)05-22 00:35:58.205:E/SignInIntentService(11166):at aqu.a(SourceFile:221)05-22 00:35:58.205:E/SignInInten tService(11166):com.google.Android.gms.games.service.GamesSignInIntentService.onHandleIntent(SourceFile:343)05-22 00:35:58.205:E/SignInIntentService(11166):at Android.app.IntentService $ ServiceHandler .handleMessage(IntentService.Java:65)05-22 00:35:58.205:E/SignInIntentService(11166):at Android.os.Handler.dispatchMessage(Handler.Java:99)05-22 00:35:58.205:E/SignInIntentService(11166):Android.os.Looper.loop(Looper.Java:137)05-22 00:35:58.205:E/SignInIntentService(11166):Android.os.HandlerThread.run(HandlerThread.Java: 60)05-22 00:35:58.205:E/LoadSelfFragment(15328):サインインできません-アプリケーションに登録済みクライアントIDがありません
アプリの実行中にインターネット接続を確認してください。接続していない場合、このエラーメッセージがログに記録されます。
バージョンID!バージョンIDを最新のリリースよりも大きい値に変更する必要がありました。突然ログインできました!
私にとっては、サンプル(ボタンクリッカー)を使用し、リリースされたアプリの1つとしてそれを装っていました。オフになっているように見えるので、SHA1の変更をすべて行う必要がありましたが、私の好意で変わった変更は、サンプルが1から始まり、実アプリ/公開アプリが2に設定されたため、バージョンIDを3に更新することでした。