Зефир (уровень API 23) Firebase не работает - PullRequest
0 голосов
/ 04 мая 2018

Я уже некоторое время пытаюсь реализовать обмен сообщениями Firebase в своем приложении. Я следовал различным учебникам, включая официальный 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, а также с метатегом и без него для настройки канала)

Я также добавил следующее в свой класс Application:

FirebaseApp.initializeApp(this);

Очевидно, это было необходимо, когда я пытался использовать метод "getToken ()" через Firebase. А также пробовал с этими методами и без них.

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

FirebaseInstanceId.getInstance().token

Я, конечно, добавил библиотеку сообщений (и сервисные модули Google Play) в свой модуль приложения:

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
        }
    }
}

РЕДАКТИРОВАТЬ: Я, конечно, также добавил google-services.json в проект

При отправке сообщений через панель инструментов Firebase я пытался: - Вход в канал - Установка цели как пользовательский сегмент - Установка цели в качестве одного устройства (токен из приложения) - ...

Я также пробовал такие вещи, как: - удаление и переустановка приложения всякий раз, когда я пробую новый подход - удаление instanceid и повторный вызов getToken - Попытка в режиме отладки и без отладки - ...

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

enter image description here

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

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

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

enter image description here

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

1 Ответ

0 голосов
/ 07 мая 2018

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

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

android:label="@string/app_name"
tools:node="replace"
tools:replace="android:icon,android:label"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...