0

iOS クライアントから Google App Engine (GAE) アプリケーションに、iOS アプリケーションの公開 API アクセス キーを送信しようとしました。

iOS クライアントは、Google Cloud Endpoints (Objective-C 用の Google API クライアント ライブラリを使用) を使用して、次のようにサーバーに接続します。

GTLServiceMyApp *service = [[GTLServiceMyApp alloc] init];
service.APIKey = ...

GTLQueryMyApp *query = [GTLQueryMyApp queryForAPITest];

[service executeQuery: query completionHandler: ^(GTLServiceTicket *ticket, id response, NSError *error) {
    NSLog(@"error=%@", error);
}];

これはある程度期待どおりに機能します。クライアントが API キーを送信し、何も定義されていない場合、特定のエラーを受け取ります。クライアントが正しい API キー (Google Developers Console でバンドル IDcom.mydomain.MyAppに定義されている) を送信した場合、呼び出しは成功しますが、クライアントが間違った API キーまたは削除された API キーを送信した場合、特定のエラーを再び受け取ります。

奇妙なことに、サーバーでこのコードを使用して、API キーが存在するかどうかを確認します (つまり、 で参照しrequest.getParameter("key")ます)。クライアントは予期しないエラーを受け取ります。

@ApiMethod
public void test(HttpServletRequest request) {
    String key = request.getParameter("key");
    ...
}

エラーは次のとおりです。渡された API キーにはバンドル識別子 (IP ごとまたはリファラーごとの制限ではない)、つまり正しいもの ( com.mydomain.MyApp) が含まれているため、これは予想外です。

API キーに構成された IP ごとまたはリファラーごとの制限があり、リクエストがこれらの制限に一致しません。この IP またはリファラーからのリクエストを許可する必要がある場合は、Google Developers Console を使用して API キーの設定を更新してください。

これは機能ですか、それともバグですか? ここで何が起こっているのか、GAE アプリケーションが (有効な) API キーが存在するかどうかをどのようにチェックするのか、誰か教えてください。

UPDATEすべてのアプリケーションが許可されるように API キーを変更すると (つまり、バンドル識別子の空のリストを使用して)、クライアントは次のエラーを受け取ります。

アクセスが構成されていません。プロジェクトで API (MyApp) が有効になっていません。Google Developers Console を使用して構成を更新してください。

4

0 に答える 0