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

What is the correct way to provide an API Key to a Google Cloud Endpoints 2 API for an app?

我在 Google 端点中有一个 API,并且我已经生成了 Android 应用程序所需的 API 密钥,我正在使用它来访问API。但是,在使用生成的客户端库时,我不知道在哪里提供 API 密钥。禁止从应用 returns 403,Android 应用发出的每个请求。我也在 SO 中读到它应该在 header 中给出,但是最接近 Google 端点 API 文档提到的是 API 键应该是一部分URL,但如果请求来自 Android 客户端,则情况似乎并非如此。

当 API 键从 API 中删除时,任何查询,甚至 curl,都能够检索到预期的结果。任何关于如何使用代码示例完成此操作的文档也将不胜感激。

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

Ps:我之前关于此的问题被不公平地否决了,收到的唯一答案是关于国家限制,我确信这与此无关。所以也许这一次我会用另一种方式重新表述我的问题。

我已经设法获得至少一种类型的 API 密钥来使用 Google 云端点 API。方法如下:

1) 'usable' API 密钥是在没有任何限制的情况下生成的(即:不是 Android App、Web 等)。在 API 凭据页面中创建密钥时,您可以 select 限制它。

2) 'usable' 密钥通过 service..setKey(...) 方法传递到生成的客户端库。

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

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

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

在 Google 云控制台 -> API & 服务 -> 凭据

API的用法 输入Java代码:

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