Зефир (уровень API 23) Firebase messaging не работает
Я уже некоторое время пытаюсь реализовать Firebase messaging в своем приложении. Я следил за различными видами учебника, включая официальный по Firebase, добавляя его вручную и автоматически с помощью Firebase Assistant.
по какой-то причине истинны следующие утверждения:
- onTokenRefresh() в расширении FirebaseInstanceIdService класса, никогда не называть.
- onMessageReceived (remoteMessage: RemoteMessage?) в этот класс, расширяющий FirebaseInstanceIdService, никогда не вызывается.
- сообщения не принимаются на
MyFirebaseInstanceIDService:
class MyFirebaseInstanceIDService : FirebaseInstanceIdService() {
val TAG = javaClass?.simpleName
override fun onTokenRefresh() {
super.onTokenRefresh()
val refreshedToken = FirebaseInstanceId.getInstance().token
System.out.println("firebasedebug (" + TAG + "): onTokenRefresh(): " + refreshedToken)
}
}
MyFirebaseMessagingService
class : FirebaseMessagingService() {
val TAG = javaClass?.simpleName
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
super.onMessageReceived(remoteMessage)
System.out.println("firebasedebug (" + TAG + "): onMessageReceived(remoteMessage: " + remoteMessage+")")
}
}
я добавил следующее в мой манифест:
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id"/>
<service
android:name="dk.myapp.service.firebase.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
android:name="dk.myapp.service.firebase.MyFirebaseInstanceIDService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
(обратите внимание, что я попытался установить экспорт в true и false, а также с метатегом и без него для установки канала)
I также добавили в мой класс приложений следующее:
FirebaseApp.initializeApp(this);
по-видимому, это было необходимо, когда я пытался использовать метод "getToken ()" через Firebase. A также пробовали с этими методами и без них.
в моей основной деятельности я попытался разместить метод "getToken ()" через Firebase, чтобы попытаться запустить инициализацию токена, но все равно без успеха.
FirebaseInstanceId.getInstance().token
Я, конечно, добавил библиотеку обмена сообщениями (и google play сервисные модули) в мой модуль приложения gradle:
compile 'com.google.firebase:firebase-messaging:15.0.0'
compile 'com.google.android.gms:play-services-ads:15.0.0'
compile 'com.google.android.gms:play-services-maps:15.0.0'
compile 'com.google.android.gms:play-services-base:15.0.0'
compile 'com.google.android.gms:play-services-location:15.0.0'
An также добавил эту строку в нижней части файла gradle:
apply plugin: 'com.google.gms.google-services'
и эти к моему проекту gradle:
buildscript {
ext.kotlin_version = '1.1.4-2'
ext.anko_version = '0.10.2'
repositories {
mavenCentral()
jcenter()
google()
}
dependencies {
...
classpath 'com.google.gms:google-services:3.2.1' // google-services plugin
...
}
allprojects {
tasks.withType(JavaCompile) {
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
}
}
}
allprojects {
repositories {
maven {
url "https://maven.google.com" // Google's Maven repository
}
}
}
EDIT: я, конечно, также добавил google-сервисы.json для проекта
при отправке сообщений через Панель управления Firebase я попытался: - Вход в канал - Установка цели в качестве сегмента пользователя - Установка цели как одиночного прибора ( маркер из приложения) - ...
я тоже пробовал такие вещи, как: - удаление и переустановка приложения всякий раз, когда я пытался новый подход - удаление instanceid и вызов getToken снова - Попытка как в режиме отладки, так и без отладки - ...
вот как выглядит мой список отправленных сообщений на панели мониторинга:
если больше деталей необходимы, то пожалуйста дайте мне знать и я конечно поставлю их (если вероятный.)
редактировать Я опробовал REST API и сделал несколько замечаний.
- первый раз, когда я попытался отправить стандартное уведомление, я получил ответ с успехом: 1 и неудачей: 0, но после этого (неудача: 1) с "ошибкой": "не зарегистрирован" (см. изображение ниже)
- Я получаю 200 обратно каждый раз.
- если я удалю / переустановить приложение и использование нового токена, то же самое, что описано выше, происходит снова.
- ни одна из попыток не дала мне видимого push-сообщения на устройстве, и метод onMessageReceived не был вызван, который я тестировал через сообщения журнала и syso в коде и с отладчиком.
1 ответов
Я, наконец, нашел решение моей конкретной ситуации.
решение для меня было удалить следующие строки из моего файла манифеста в теге приложения:
android:label="@string/app_name"
tools:node="replace"
tools:replace="android:icon,android:label"