Отсутствует ключ api_key/current с Google Services 3.0.0 и ключом API Карт в build.gradle

моя проблема очень похожа на Отсутствует api_key/текущий ключ с Google Apps 3.0.0, но с еще большей степенью сложности.

Сегодня утром я обновил приложение до com.google.gms: google-services: 3.0.0 и всех зависимостей play-services 9.0.0

compile 'com.google.android.gms:play-services-analytics:9.0.0'
compile 'com.google.android.gms:play-services-ads:9.0.0'
compile 'com.google.android.gms:play-services-identity:9.0.0'
compile 'com.google.android.gms:play-services-gcm:9.0.0'

Теперь я получаю печально известную ошибку

Ошибка: выполнение не выполнено для задачи ': hotelsclick: processDebugGoogleServices'. > Отсутствует объект api_key/current_key

Это связано с отсутствием ключа API в файле google-services.json(так мне сказали). Я получил новый ключ API из https://developers.google.com/cloud-messaging/android/client#get-config и нашел в нем следующее поле.

  "api_key": [],

Я предполагаю, что я должен добавить свой ключ API Карт Google, но здесь возникает двойная проблема, с которой я сталкиваюсь:

1- Если я попытаюсь поместить ключ в это поле, это не сработает. Я попытался с помощью

  "api_key": [{ "current_key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE" }],

и

  "api_key": ["XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-AE"],

ошибка остается неизменной.

2- Я использовал gradle, чтобы использовать динамическое построение. В моем модуле build.gradle вложено следующее:

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        debuggable false
        resValue "string", "google_maps_api_key", "ABCDEFGHILMNO... my maps release API key"
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
        zipAlignEnabled true
    }
    debug {
        resValue "string", "google_maps_api_key", "ZNTMRNCDNR... my google maps debug API key"
        debuggable true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
    }
}

В файле Androidmanifest.xml у меня есть

    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_api_key" />

Теперь он работал до тех пор, пока я не обновился до Google Services 3.0.0, я не понимаю, почему он не работает сейчас. Не следует ли захватить правильный ключ API из скомпилированного файла build.gradle и поместить его в манифест?

Итак, мой двойной вопрос: почему работа с динамическим API-интерфейсом больше не работает? И как я могу это исправить?

Спасибо

Ответ 1

Вы пытались поместить пустую "current_key" следующим образом:

"api_key": [{ "current_key": "" }]

Посмотрите, как это происходит.

Ответ 2

Мне удалось решить эту проблему с помощью этих шагов, на которые здесь не ответил. Этот ответ НЕ позволяет облачным сообщениям, он извлекает только свой ключ сервера. (Уточнение, потому что мой ответ был удален для того, чтобы быть "дубликатом", когда он вообще отсутствует).

Итак, сначала зайдите в Firebase Console, а затем перейдите в "Настройки проекта", а затем нажмите вкладку "Cloud Messaging". Посмотрите, где написано "серверный ключ", и если не отображается длинный ключ (не номер "ID отправителя" ), нажмите "Восстановить ключ", и теперь должен появиться длинный ключ. Скопируйте этот ключ и поместите его в свой файл google-services.json по адресу: "api_key": [ {"current_key" : "key goes here"} ].

Этот метод помог мне, пока никто из других не работал, поэтому, надеюсь, это помогает кому-то.

Ответ 3

С этой проблемой вы столкнетесь после использования нового инструмента построения classpath 'com.google.gms:google-services:3.0.0',

Просто заново создайте свой "google-services.json". она будет решена с надеждой.

Ответ 4

Если вы случайно удалили ключ или не смогли его восстановить, создайте новый api-удостоверение здесь и назовите его точно "Android-ключ ( автоматически созданный службой Google)". Это вернет ваши учетные данные в google-services json.

Ответ 5

Вы должны включить Cloud Messaging, даже если вы не используете его и не создаете новый json файл. Когда вы включаете Cloud Messaging, вам нужен ключ API для него.

Возможно, вам нужна какая-либо другая услуга, см. это: fooobar.com/questions/32814/...

Ответ 6

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

Кроме того, вы можете добавить активность Google Карт в свой проект, а Android Studio создаст для вас необходимые файлы, вам нужно будет вставить ключи.

Поскольку вы используете gradle, вы можете сделать следующее:

build.gradle

android {
.. .. ...
buildTypes {
debug {
resValue "string", "google_maps_api_key", "[YOUR DEV KEY]"
}
release {
resValue "string", "google_maps_api_key", "[YOUR PROD KEY]"
}
}
}

AndroidManifest.xml

meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_api_key"/>

Таким образом, у вас есть только один AndroidManifest.xml и вы устанавливаете значение на основе типа вашей сборки.

Вы также можете проверить этот манифест заполнителя: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-Placeholder-support