将iOS应用程序的公共访问密钥发送到GAE应用程序时出错

时间:2015-03-03 07:35:45

标签: ios google-app-engine google-cloud-endpoints api-key google-client

我尝试将iOS应用程序的公共API访问密钥从iOS客户端发送到Google App Engine(GAE)应用程序。

iOS客户端使用Google Cloud Endpoints(后者使用Google API客户端库for Objective-C)与服务器联系,如下所示:

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密钥,则会收到特定错误。如果客户端发送了正确的API密钥(如在Google Developers Console中为捆绑包标识com.mydomain.MyApp定义的那样),则调用成功,但如果客户端发送错误或已删除的API密钥,则会再次收到特定错误。

奇怪的是,在服务器上使用此代码来检查API密钥是否存在(即用request.getParameter("key")引用它)客户端收到意外错误:

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

错误如下。这是意料之外的,因为传递的API密钥包含一个包标识符(不是每个IP或每个Referer限制),即正确的(com.mydomain.MyApp)。

  

您的API上配置了每IP或每个Referer限制   密钥和请求不符合这些限制。请使用   Google Developers Console用于更新您的API密钥配置   应允许来自此IP或引用者的请求。

这是一个功能还是一个错误?任何人都可以告诉我们这里发生了什么以及GAE应用程序如何检查(有效)API密钥是否存在。

更新如果我修改API密钥以允许任何应用程序(即包含标识符的空列表),则客户端会收到此错误:

  

未配置访问权限。您的项目未启用API(MyApp)。   请使用Google Developers Console更新您的配置。

0 个答案:

没有答案