YouTube Player API с открытыми ключами GCP API

Недавно я получил это оповещение в консоли Google Play

Ваше приложение содержит открытые ключи API Google Cloud Platform (GCP).

Я использую YouTubeApi Player и считаю, что его можно инициализировать только с помощью этой строки кода.

youTubePlayer.initialize(DEVELOPER_KEY, this);

Итак, помимо дополнительных ограничений для моего ключа API, есть ли другой способ удалить ключ API из кода?

Я попытался использовать сервисные учетные записи GCP, как это было предложено Google, но не понимаю, как я могу использовать YouTube Player без строки кода инициализации.


person j.t.h.    schedule 05.08.2019    source источник


Ответы (2)


У меня такая же проблема, и я исправил ее, используя строку R.string.google_api_key, сгенерированную google_services.json

измените свой код на:

youTubePlayer.initialize(getString(R.string.google_api_key), this);

как получить google_services.json:

person Bamz3r    schedule 09.12.2019

Есть несколько советов о том, как защитить свои ключи API, на странице Использование ключей API документация.

Утверждается, что следует избегать встраивания ключей API непосредственно в код, что у вас есть прямо сейчас, поэтому вы получаете предупреждающее сообщение.

Следуйте советам на этой странице, и вам следует должным образом защитить свой ключ API. Как только вы это сделаете, предупреждение исчезнет.

ОБНОВИТЬ

Чтобы избежать долгого обсуждения в комментариях, позвольте мне подробнее рассказать об этом обновлении.

Google предоставляет различные способы аутентификации, чтобы предоставить вам больше возможностей для защиты ваших приложений в зависимости от ваших потребностей. Предупреждения - это полезные советы, которые помогут сделать ваши приложения более безопасными при запуске в производство или публикации в открытом доступе. Так что в вашем случае было бы лучше использовать другой способ аутентификации.

Ключи API можно использовать на стороне сервера. например Если вы используете ключ API для аутентификации сторонней службы из приложения App Engine, вы можете использовать этот ключ в том виде, в каком он у вас уже есть, поскольку раскрыть ключ невозможно. (Избегайте использования ключей API в JavaScript, поскольку при проверке страницы в браузере также открывается ключ API)

В вашем случае, поскольку вы разрабатываете приложение для Android и / или приложение для iOS, наличие ключа API в коде опасно. Потому что любой может использовать файл .apk или .ipa и найти способ получить к нему доступ. Поэтому для разработки приложений для Android и iOS предлагается использовать другой метод аутентификации. Другой метод аутентификации, поддерживаемый API проигрывателя YouTube, использует OAuth 2.0. Дополнительную информацию можно найти в документации по регистрации приложения.

person Andrei Cusnir    schedule 07.08.2019
comment
Проблема в том, что проигрывателю YouTube необходимо: youTubePlayer.initialize(DEVELOPER_KEY, this); - person j.t.h.; 08.08.2019
comment
Я могу добавить ограничения к своему ключу API, я искал способ скрыть ключ API и при этом передать его init youTubePlayer. - person j.t.h.; 08.08.2019
comment
Понятно. API-интерфейс YouTube Player нуждается в строке DEVELOPER_KEY as, но вместо того, чтобы встраивать ее в код, как вы сейчас делаете, вы можете store them in environment variables or in files outside of your application's source tree., как указано в документации, которой я поделился выше. Это означает, что вы можете иметь его как зашифрованную строку в файле вне кода вашего приложения. Загрузите файл, расшифруйте его и используйте. - person Andrei Cusnir; 08.08.2019
comment
Это то, что я искал, пример внешнего хранения ключа с последующим его чтением. Я читал документацию, которую вы предоставили ранее, и в ней упоминалось использование GCP service account, но я считаю, что это не сработает, поскольку он ожидает API для автоматического считывания учетных данных, которые API YouTube не может. - person j.t.h.; 08.08.2019
comment
GCP service account, на который вы ссылаетесь в документации, используется в службах Google. например если вы используете Cloud SQL, учетная запись службы Cloud SQL появится в ролях IAM, а если вы используете Cloud Build, учетная запись службы Cloud Build появится в ролях IAM. Поэтому, если вы хотите получить доступ к Cloud SQL с помощью Cloud Build, вместо использования ключей API вы можете аутентифицировать эти сервисные учетные записи для доступа друг к другу в рамках ролей IAM. Вот что это значит. - person Andrei Cusnir; 09.08.2019
comment
Теперь, когда я более подробно рассмотрю документацию, я понимаю, что она указывает вам использовать ключ API только для целей тестирования и использовать другой метод аутентификации в производственной среде. Поскольку store them in environment variables or in files outside of your application's source tree., означает, что после выпуска приложения файл и переменная среды не будут там, поэтому он не сможет аутентифицироваться с помощью ключа API. - person Andrei Cusnir; 09.08.2019
comment
Я предлагаю использовать другой метод аутентификации, который будет более безопасным, в противном случае вы можете обойти предупреждение (ЧТО НЕ РЕКОМЕНДУЕТСЯ), разделив ключ API на части и собрав его перед использованием. Вы можете увидеть этот ответ Stackoverflow. Однако имейте в виду, что если ваш исходный код открыт, то будет открыт и ключ API. - person Andrei Cusnir; 09.08.2019
comment
Для разработчиков iOS и Android по этой ссылке «Защита ключа API» очень мало конкретной помощи. - person funkybro; 09.08.2019
comment
Кажется, что Google паникует всех этими предупреждающими сообщениями, но на самом деле не дает конкретных советов о том, что делать вместо этого. Поэтому разработчики применяют такие хаки, как разделение этих ключей API, и надеются на лучшее. - person funkybro; 09.08.2019
comment
Я обновил свой ответ, предоставив дополнительную информацию о различных способах аутентификации ваших приложений, а также о том, когда и почему ключ API может быть полезен. Пожалуйста, проверьте мой ответ еще раз, надеюсь, он будет вам полезен. - person Andrei Cusnir; 09.08.2019