Я уже некоторое время пытаюсь реализовать обмен сообщениями 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
- Попытка в режиме отладки и без отладки
- ...
Вот как выглядит мой список отправляемых сообщений на панели инструментов:
Если вам потребуется дополнительная информация, пожалуйста, дайте мне знать, и я, конечно, предоставлю их (если это возможно).
EDIT
Я опробовал REST API и сделал несколько замечаний.
- Первый раз, когда я пытался отправить стандартное уведомление, я получил ответ с успехом: 1 и с ошибкой: 0, но потом наоборот (ошибка: 1) с ошибкой: «NotRegistered» (см. Изображение ниже)
- Я получаю 200 обратно каждый раз.
- Если я деинсталлирую / переустановлю приложение и использую новый токен, снова произойдет то же самое, что описано выше.
- Ни одна из попыток не дала мне видимого push-сообщения на устройстве, также не был вызван метод onMessageReceived, который я проверял с помощью сообщений журнала и syso в коде и с помощью отладчика.