Google 播放有关 Google 云平台 (GCP) API 密钥的安全警报
Google Play Security alert about Google Cloud Platform (GCP) API keys
我们在多个平台(Android、iOS、Web)上使用 GCP API 密钥进行 Google 地图、位置搜索 (api/place/autocomplete)
、 static Google 地图等
现在我想为 Android 应用程序创建一个 new/separate 密钥,这样我就可以添加适当的限制,例如包名称 SHA1 并使用 APIs.
我创建了一个新密钥,在该地图工作正常后将其更改为应用程序,但位置搜索 API 一直抛出异常-
This IP, site or mobile application is not authorized to use this API key. Request received from IP address <ip>, with empty referer",
有人遇到过这个问题吗?或者我应该如何调试它的任何线索?
您不能使用 Android 或 iOS 受限的 API 密钥发出 Web 服务请求。 Web 服务是服务器端的,只能使用受 IP 地址限制的 API 密钥。
您的每个 API 密钥都应根据使用中的 API 进行适当限制。
对于 web services,使用 IP 限制的 API 密钥。
对于 client-side services,使用 HTTP 引用限制 API 密钥。
对于 Android or iOS 的地图和地点 SDK,请使用 Android/iOS 受限 API 密钥。
要详细了解 API 地图 API 的 API 关键限制,请查看这些资源:
https://developers.google.com/maps/faq#keysystem
https://developers.google.com/maps/api-key-best-practices#restrict_apikey
希望这能澄清您的问题!
我有同样的问题,我正在使用 Android RN 应用程序,但这对任何移动应用程序(Native 或 React native)都有帮助,你遇到的问题是硬编码你的 API KEY(这种情况google 将 API 放入您的源代码中),为了避免它,您应该将其删除并将其添加为 System/environment 变量,具体取决于您使用的 OS OS MAC 或 Windows,或者您 CI/ CD,如果您通过它交付您的应用程序。我通过以下步骤解决了问题:
我必须在本地设置我的系统环境变量
在我的例子中我使用的是 MacOS,打开终端和 运行
导出 GOOGLE_PLACES_ANDROID_API_KEY=Insert_API_KEY_here
(可选但这样更好)或将其复制到 ~/.bash_profile
确保我的 system/environment 变量在那里 - 在
terminal "printenv" - 这将列出那些并且应该有你的
api键
GOOGLE_PLACES_ANDROID_API_KEY
在下面一行添加android/gradle.properties
# GOOGLE PLACES (we will replace this value DON'T COPY YOUR API KEY HERE)
GOOGLE_PLACES_ANDROID_API_KEY=HiHackerNoMyKey
- 在 defaultConfig
中的 app/build.gradle 添加以下行
defaultConfig {
buildConfigField("String", "GOOGLE_PLACES_ANDROID_API_KEY", "\"${GOOGLE_PLACES_ANDROID_API_KEY}\"")
}
在我的例子中,我将 Appcenter 用作 CI,所以如果我们在 CI 中构建,我添加了这一行并且我的 CI 应该有我的 APIKEY在我的 system/environment 变量中已经设置
[buildConfigField("String", "GOOGLE_PLACES_ANDROID_API_KEY", "\"${System.env.GOOGLE_PLACES_ANDROID_API_KEY}\"")](url)
您可以使用 java
来调用它
Log.i(TAG, BuildConfig.GOOGLE_PLACES_ANDROID_API_KEY);
更多参考
https://developer.android.com/studio/build/gradle-tips#simplify-app-development
希望对您有所帮助!!
我们在多个平台(Android、iOS、Web)上使用 GCP API 密钥进行 Google 地图、位置搜索 (api/place/autocomplete)
、 static Google 地图等
现在我想为 Android 应用程序创建一个 new/separate 密钥,这样我就可以添加适当的限制,例如包名称 SHA1 并使用 APIs.
我创建了一个新密钥,在该地图工作正常后将其更改为应用程序,但位置搜索 API 一直抛出异常-
This IP, site or mobile application is not authorized to use this API key. Request received from IP address <ip>, with empty referer",
有人遇到过这个问题吗?或者我应该如何调试它的任何线索?
您不能使用 Android 或 iOS 受限的 API 密钥发出 Web 服务请求。 Web 服务是服务器端的,只能使用受 IP 地址限制的 API 密钥。
您的每个 API 密钥都应根据使用中的 API 进行适当限制。
对于 web services,使用 IP 限制的 API 密钥。
对于 client-side services,使用 HTTP 引用限制 API 密钥。
对于 Android or iOS 的地图和地点 SDK,请使用 Android/iOS 受限 API 密钥。
要详细了解 API 地图 API 的 API 关键限制,请查看这些资源:
https://developers.google.com/maps/faq#keysystem
https://developers.google.com/maps/api-key-best-practices#restrict_apikey
希望这能澄清您的问题!
我必须在本地设置我的系统环境变量 在我的例子中我使用的是 MacOS,打开终端和 运行
导出 GOOGLE_PLACES_ANDROID_API_KEY=Insert_API_KEY_here
(可选但这样更好)或将其复制到 ~/.bash_profile
确保我的 system/environment 变量在那里 - 在 terminal "printenv" - 这将列出那些并且应该有你的 api键
GOOGLE_PLACES_ANDROID_API_KEY
在下面一行添加android/gradle.properties
# GOOGLE PLACES (we will replace this value DON'T COPY YOUR API KEY HERE)
GOOGLE_PLACES_ANDROID_API_KEY=HiHackerNoMyKey
- 在 defaultConfig 中的 app/build.gradle 添加以下行
defaultConfig {
buildConfigField("String", "GOOGLE_PLACES_ANDROID_API_KEY", "\"${GOOGLE_PLACES_ANDROID_API_KEY}\"")
}
在我的例子中,我将 Appcenter 用作 CI,所以如果我们在 CI 中构建,我添加了这一行并且我的 CI 应该有我的 APIKEY在我的 system/environment 变量中已经设置
[buildConfigField("String", "GOOGLE_PLACES_ANDROID_API_KEY", "\"${System.env.GOOGLE_PLACES_ANDROID_API_KEY}\"")](url)
您可以使用 java
来调用它Log.i(TAG, BuildConfig.GOOGLE_PLACES_ANDROID_API_KEY);
更多参考 https://developer.android.com/studio/build/gradle-tips#simplify-app-development
希望对您有所帮助!!