Уведомления о темах FCM принимаются на эмуляторе, но не на других устройствах - PullRequest
0 голосов
/ 05 июня 2018

У меня проблема с тем, что Firebase Cloud Messaging будет отправлять уведомления на эмулятор (Android 7.0, с установленными службами воспроизведения), но не на любое устройство (Google Pixel 2, Samsung s9 +, Huawei MATE 10) под управлением Android 8+.Сначала я думал, что это может быть проблема энергосбережения, закрывающая слушателя, но даже когда я удаляю оптимизацию из приложения, она все равно не проходит.

Я знаю, что нисходящий запрос успешно отправляется, и я получаю код состояния 200 из ответа (и, конечно, потому что уведомление получено на эмуляторе).Однако при отладке на устройствах класс onMessageReceived в моем классе FCMService вообще не вызывается ни на переднем, ни на заднем плане.

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

<service android:name=".services.FCMService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

Если требуется дополнительная информация, дайте мне знать.Заранее спасибо.

1 Ответ

0 голосов
/ 05 июня 2018

Почему это произошло?

Я понял, когда вводил номера версий в вопрос, что это будет иметь отношение к Android Oreo.Я искал проблемы с FCM, а не последние изменения, как работают уведомления.В Android 26+ были введены каналы уведомлений , которые необходимы, если ваше приложение ориентировано на 26 и выше (как я).Поскольку я обновил целевой SDK, не задумываясь, я, конечно, получил уведомление без уведомлений.

Как это исправить

Самый простой способ - просто настроить API 25, ноэто не идеально.

Что вы можете сделать, это зарегистрировать каналы уведомлений.Я сделал это, когда обрабатывал свои уведомления (поэтому onMessageReceived), поскольку он не регистрирует один и тот же канал более одного раза.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    // Set the default notification channel settings to be that of alert
    int importance = NotificationManager.IMPORTANCE_HIGH;
    String channel_id = ALERT_CHANNEL_ID;
    CharSequence channel_name = ALERT_CHANNEL_NAME;
    String channel_desc = ALERT_CHANNEL_DESC;

    // Logic to change the channel id, name and desc if required

    // Build and modify channel settings
    NotificationChannel channel = new NotificationChannel(channel_id, channel_name, importance);
    channel.setDescription(channel_desc);
    channel.enableLights(true);
    channel.enableVibration(true);

    // Create the notification channel
    notificationManager.createNotificationChannel(channel);
}

Затем вы хотите изменить построитель уведомлений:

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channel_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...