5

Google エンドポイントを動作させようとしています。エンドポイント サービスを作成し、Google API エクスプローラーを介して正常に動作することをテストできました。次に、Android クライアントを生成し、エンドポイント サービスを呼び出そうとしました。ログにこのエラーが表示されます。

04-05 08:48:20.547: I/GLSUser(13505): GLS error: INVALID_AUDIENCE myemail@gmail.com audience:server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com

これは、サービスにアクセスするために使用される資格情報を作成するための私のAndroid Javaコードです。

AUDIENCE = "server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com";
credential = GoogleAccountCredential.usingAudience(this, AUDIENCE);
            setAccountName(settings.getString(PREF_ACCOUNT_NAME, null));

client_id に不一致があるようです。これが私がしたことです、

1) 1 つの API プロジェクトで Google API コンソールに 2 つの client_id を作成しました。b) ANDROID_CLIENT_ID = パッケージ名と sha1 証明書フィンガープリントを使用して Android アプリの client_id を作成しました。

2) 次に、Python のエンドポイント サービスでこれらを使用しました。

@endpoints.api(name='devices',
               version='v1',
               description='Service to register devices',
               allowed_client_ids=[ANDROID_CLIENT_ID,WEB_CLIENT_ID,endpoints.API_EXPLORER_CLIENT_ID],
               audiences = [WEB_CLIENT_ID])

完全なログ

04-05 08:48:20.397: D/overlay(159): Set pipe=RGB1 dpy=0; Set pipe=VG0 dpy=0; 
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: INVALID_AUDIENCE status: null
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: INVALID_AUDIENCE status: null
04-05 08:48:20.547: I/GLSUser(13505): GLS error: INVALID_AUDIENCE myemail@gmail.com audience:server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: Unknown status: UNKNOWN
04-05 08:48:20.547: W/System.err(31908): com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException
04-05 08:48:20.547: W/System.err(31908):    at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:224)
04-05 08:48:20.547: W/System.err(31908):    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:836)
04-05 08:48:20.547: W/System.err(31908):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412)
04-05 08:48:20.557: W/System.err(31908):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345)
04-05 08:48:20.557: W/System.err(31908):    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463)
04-05 08:48:20.557: W/System.err(31908):    at com.package.appname.SetupActivity$SendResultToServerTask.doInBackground(SetupActivity.java:174)
04-05 08:48:20.557: W/System.err(31908):    at com.package.appname.SetupActivity$SendResultToServerTask.doInBackground(SetupActivity.java:1)
04-05 08:48:20.557: W/System.err(31908):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-05 08:48:20.557: W/System.err(31908):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-05 08:48:20.557: W/System.err(31908):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-05 08:48:20.557: W/System.err(31908):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-05 08:48:20.557: W/System.err(31908):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-05 08:48:20.557: W/System.err(31908):    at java.lang.Thread.run(Thread.java:856)
04-05 08:48:20.557: W/System.err(31908): Caused by: com.google.android.gms.auth.GoogleAuthException: Unknown
04-05 08:48:20.557: W/System.err(31908):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
04-05 08:48:20.557: W/System.err(31908):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)

同様のスレッドを既に見たことがありますが、役に立ちませんでした 。Google Api と android Oauth INVALID_AUDIENCE エラー

4

5 に答える 5

4

ふぅ!最後にそれを機能させました。何が間違っていたのかわからない。これらのことを試し、デバッグキーストアファイルを削除して再生成しました。sha1 フィンガープリントを API コンソールにコピーしました。次に、ここからの指示に従ってください- http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html少なくともAndroidデバイスでトークンを取得できることを確認してください。次に、エンドポイントで生成されたクライアント クラスを使用するように変更しました。これで、アプリはエンドポイント サービスを介してアプリ エンジン バックエンドと通信できるようになりました。

于 2013-04-06T03:31:05.650 に答える
3

@Api#clientIds にアノテーションを付ける ANDROID_CLIENT_ID に、Android クライアントの名前とは異なる Android パッケージ名がある場合、このエラーが発生します。

例えば

@Api(
    name = "yourFirstService",
    version = "v1",
    namespace = @ApiNamespace(ownerDomain = "myorg.org", ownerName = "My Org", packagePath = "firstservice" ),
    scopes = {Constant.API_EMAIL_SCOPE},
    clientIds = {Constants.ANDROID_CLIENT_ID, Constant.API_EXPLORER_CLIENT_ID},
    audiences = {Constants.ANDROID_AUDIENCE}
)
public class YourFirstAPI { 
  ...
}

重要なのは clientId 属性です。そこに必要なANDROID_CLIENT_ID

  1. アプリケーションの clientId と一致させCloud Console->APIS & Auth->Credentials->Client ID for Androidます。
  2. その clientId のパッケージ名は、クライアントとして使用している Android アプリと同じである必要があります。
于 2014-07-12T02:18:00.687 に答える
2

私のデバイスでは問題なく動作しましたが、私のチームの 1 つに起こりました。debug.keystoreそれは、私たちの eclipse インストールの違いによるものであることが判明しました。

debug.keystoreそれを解決するために、会社のファイルをコピーしました~/.android/ (これは Mac のディレクトリであり、Linux と Windows では異なります)。

于 2014-12-18T10:54:17.413 に答える
2

この問題は、別のシステムで新しい開発環境を作成したときに発生しました。新しいシステムに Android Studio をインストールし、コードをコピーしました。古いシステムで動作していた同じコードが新しいシステムでは動作せず、INVALID_AUDIENCE が発生しました。いくつかのことを試した後、最終的に機能したのは、古いシステムから新しいシステムに debug.keystore ファイルをコピーすることでした。Windows では、ファイルは %USERPROFILE%.android にあります。debug.keystore はインストール時に Android Studio によってそのコンピュータ専用に生成されるため、これは理にかなっています。debug.keystore には有効期限(365日と聞いた)があるので、これも原因かもしれません。したがって、私にとっての本当の解決策は、新しいシステムで debug.keystore ファイルを再生成することでした。debug.keystore ファイルを削除して Android Studio を再起動すると、ファイルが再生成されます。次に、keytool を実行して SHA1 証明書のフィンガープリントを取得します。次に行きますhttp://console.developers.google.comを使用して、フィンガープリントを使用して新しいクライアント ID を作成します。

于 2014-06-01T00:31:53.853 に答える