У меня вопрос о том, как правильно установить имя пакета и отпечаток сертификата SHA-1 в консоли разработчика Google, чтобы ограничить использование моего ключа API Android для моего приложения.
Когда в разделе "Ограничить использование приложений Android" ничего не настроено, мои запросы к API Google Translate работают правильно. API обычно отвечает кодом состояния 200 и моим ожидаемым результатом.
Но когда я указываю имя пакета и отпечаток сертификата SHA-1 для своего приложения с помощью консоли разработчиков, я последовательно получаю 403 Запрещенных ответа, таких как:
HTTP/1.1 403 Forbidden
Vary: Origin
Vary: X-Origin
Content-Type: application/json; charset=UTF-8
Date: Sun, 29 Nov 2015 21:01:39 GMT
Expires: Sun, 29 Nov 2015 21:01:39 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alternate-Protocol: 443:quic,p=1
Alt-Svc: quic=":443"; ma=604800; v="30,29,28,27,26,25"
Content-Length: 729
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "ipRefererBlocked",
"message": "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed.",
"extendedHelp": "https://console.developers.google.com"
}
],
"code": 403,
"message": "There is a per-IP or per-Referer restriction configured on your API key and the request does not match these restrictions. Please use the Google Developers Console to update your API key configuration if request from this IP or referer should be allowed."
}
}
Запрос выглядит следующим образом. Обратите внимание, что в запросе нет заголовка реферера:
GET https://www.googleapis.com/language/translate/v2?key=XXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXX&source=en&target=es&q=test HTTP/1.1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 5.1.1; Nexus 6 Build/LVY48H)
Host: www.googleapis.com
Connection: Keep-Alive
Accept-Encoding: gzip
Я предполагаю, что в сообщении об ошибке указывается имя пакета или проблема отпечатка пальца SHA-1, несмотря на сообщение об "ограничении для каждого IP-адреса или для каждого реферала". В то время как ключи браузера позволяют устанавливать ограничение для каждого реферера, я использую ключ Android, который нигде не установлен, чтобы установить ограничение для каждого IP-адреса или для каждого реферала.
Я уверен, что правильно ввел имя пакета в консоли разработчиков Google. Я читаю имя пакета из атрибута package
в теге manifest
в моем файле манифеста Android.
Я также уверен, что у меня правильно установлен fingerprint SHA-1 в консоли разработчиков Google. Я читаю это значение из своего хранилища ключей с помощью команды keytool -list -v -keystore /path/to/my/keystore
. Я получаю то же значение, когда читаю его из файла APK, используя keytool -list -printcert -jarfile myAppName.apk
. Я устанавливаю этот же APK файл с помощью adb.
Вот что я вижу в консоли разработчиков:
Я проверял это на нескольких устройствах под управлением Android. Я получаю сообщение об ошибке по Wi-Fi и сотовой сети, независимо от того, проксирую ли я трафик или нет.
Когда я снимаю ограничение с консоли разработчика, приложение снова работает правильно.
Что я здесь не так делаю?
Примечание. Несколько похожих вопросов have были заданы раньше, , но с нет адекватным отвечает. Я не хочу использовать ключ браузера или вообще снять ограничение. Я хочу, чтобы ограничение использования работало правильно.