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 を使用して構成を更新してください。