Android Studio を使用して、Android アプリ用の Google Cloud Endpoints を生成しています。エンドポイントをデプロイしましたが、正常に動作します。
私が達成したいのは、自分のアプリだけがエンドポイントにアクセスできるようにすることです。すべてのドキュメントは、ユーザーの認証を有効にする方法について説明していますが、アプリからのみエンドポイントへのアクセスを制限する必要があるだけです。APIはそれを使用しないため、ユーザー資格情報を使用したくありません。
私が試したのは、Google コンソールでアプリのクライアント ID を作成し、API アノテーションに追加することです
@Api(name = "messageEndpoint", clientIds = {Ids.WEB_CLIENT_ID, Ids.ANDROID_CLIENT_ID, Ids.API_EXPLORER}, audiences = {Ids.ANDROID_AUDIENCE}}
API メソッドごとに User パラメータを追加し、ユーザーが null かどうかを確認します。私の理解では、API がクライアント IDS の 1 つから呼び出された場合、ユーザーは null であってはなりません。ただし、ユーザーは常に null です。
何か不足していますか?
私のAndroidアプリでは
GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(DelegateActivity.this, "server:client_id:" + Ids.ANDROID_AUDIENCE);
MessageEndpoint.Builder endpointBuilder = new MessageEndpoint.Builder(
AndroidHttp.newCompatibleTransport(), new JacksonFactory(),
credential);
そして、私が得ている例外は次のとおりです。
java.lang.NullPointerException: [qi] accountName cannot be null.
E at android.os.Parcel.readException(Parcel.java:1431)
E at android.os.Parcel.readException(Parcel.java:1379)
E at com.google.android.gms.internal.a$a$a.a(Unknown Source)
E at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
E at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
E at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:277)
E at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:301)
E at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:854)
E at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
E at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
E at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)