Android 为应用程序的Google Cloud Endpoints 2 API提供API密钥的正确方法是什么?

Android 为应用程序的Google Cloud Endpoints 2 API提供API密钥的正确方法是什么?,android,google-app-engine,api-key,google-cloud-endpoints-v2,Android,Google App Engine,Api Key,Google Cloud Endpoints V2,我在Google Endpoints中有一个API,我已经生成了我正在开发的Android应用程序访问API所需的API密钥。但是,我不知道在使用生成的客户端库时在哪里提供API密钥。应用程序发出的每个请求都返回403,Android应用程序被禁止。我也读了,所以它应该在标题中给出,但是Google Endpoints API文档提到的最接近的一点是API键应该是URL的一部分,但是如果请求来自Android客户端,则似乎不是这样 当API键从API中移除时,任何查询,甚至curl,都能够检索到

我在Google Endpoints中有一个API,我已经生成了我正在开发的Android应用程序访问API所需的API密钥。但是,我不知道在使用生成的客户端库时在哪里提供API密钥。应用程序发出的每个请求都返回403,Android应用程序被禁止。我也读了,所以它应该在标题中给出,但是Google Endpoints API文档提到的最接近的一点是API键应该是URL的一部分,但是如果请求来自Android客户端,则似乎不是这样

当API键从API中移除时,任何查询,甚至curl,都能够检索到预期的结果。任何关于如何使用代码示例实现这一点的文档都将非常感谢

编辑:我还想知道谷歌本身是否对在端点中使用android debug.keystore的SHA-1设置了限制


Ps:我之前提出的关于这一点的问题被不公平地否决了,得到的唯一答案是关于国家限制,我相信这与此无关。因此,也许这次我将用另一种方式重新表述我的问题。

我已经设法获得了至少一种类型的API密钥,以与Google Cloud Endpoints API一起使用。以下是方法:

1) “可用”API密钥是在没有任何限制的情况下生成的(即:不是Android应用程序、Web等)。在API凭据页面中创建密钥时,可以选择密钥的限制

2) “可用”密钥通过service..setKey(…)方法传递到生成的客户端库

这多少产生了我想要的东西;只允许能够识别自己的调用方调用API。它工作的原因(从这一点开始,完整的假设和猜测工作)是生成的客户端库向API发出HTTPS请求,因此,授权检查应该由API(端点框架)在HTTPS请求的上下文中完成,而不是在Android应用程序的上下文中完成

如果这是真的,那么我非常有兴趣了解Android应用程序如何使用生成的客户端库对API进行“正确”调用

更新:当前设置的屏幕截图和代码

在Google云控制台->API和服务->凭证中

在Java代码中使用API密钥:

// Call to the generated client library for the API
DataCollection dataCollection =  service.getDataAPIMethod()
                .setX(...)
                .setY(...)
                .setZ(...)
                .setKey("***")
                .execute();

android中的api密钥不是总是通过清单提供的吗?是吗?如果他们是,请,我在恳求/恳求,请给我举个例子。显然我错了/没有准确理解问题,但我发现这可能会帮助你解决问题。它似乎与使用API键无关。令人惊讶的是,Google Endpoints文档中几乎没有记录如此琐碎的内容。如果您使用的是Google生成的客户端库,您应该通过请求对象中的
.setKey()
调用来设置密钥。请在回答中包含一些代码。我面临着一些类似的问题,但如果我能看到你的答案,你的答案会更清楚done@Nikolaus我在Google Cloud Endpoints中添加了设置屏幕截图,并在Java代码中添加了客户端库的用法。代码方面真的没有太多东西。有关如何设置API密钥的详细信息。您是否能够对其添加密钥限制?