Зефир (уровень 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 снова - Попытка как в режиме отладки, так и без отладки - ...

вот как выглядит мой список отправленных сообщений на панели мониторинга:

enter image description here

если больше деталей необходимы, то пожалуйста дайте мне знать и я конечно поставлю их (если вероятный.)

редактировать Я опробовал REST API и сделал несколько замечаний.

  • первый раз, когда я попытался отправить стандартное уведомление, я получил ответ с успехом: 1 и неудачей: 0, но после этого (неудача: 1) с "ошибкой": "не зарегистрирован" (см. изображение ниже)

enter image description here

  • Я получаю 200 обратно каждый раз.
  • если я удалю / переустановить приложение и использование нового токена, то же самое, что описано выше, происходит снова.
  • ни одна из попыток не дала мне видимого push-сообщения на устройстве, и метод onMessageReceived не был вызван, который я тестировал через сообщения журнала и syso в коде и с отладчиком.

1 ответов


Я, наконец, нашел решение моей конкретной ситуации.

решение для меня было удалить следующие строки из моего файла манифеста в теге приложения:

android:label="@string/app_name"
tools:node="replace"
tools:replace="android:icon,android:label"