在模拟器上接收FCM主题通知,但没有其他设备

时间:2018-06-05 01:29:23

标签: android firebase firebase-cloud-messaging

我遇到的问题是Firebase云消息传递会向模拟器(安装了播放服务的Android 7.0)发送通知,但不会向运行Android 8的任何设备(Google Pixel 2,Samsung s9 +,Huawei MATE 10)发送通知+。我最初认为这可能是关闭听众的省电问题,但即使我从应用程序中删除优化,它仍然没有通过。

我知道下游请求正在成功发送,我从响应中接收状态码200(当然因为正在模拟器上收到通知)。但是,在设备上进行调试时,我的onMessageReceived类中的FCMService根本没有被调用,无论是在前台还是后台。

它已在清单中明确注册,并且每个设备都使用相同版本的应用程序:

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

如果需要更多信息,请与我们联系。提前谢谢。

1 个答案:

答案 0 :(得分:0)

为什么会这样?

当我输入版本号时,我意识到它与Android Oreo有关。我正在搜索FCM的问题,而不是最近更改通知的工作方式。在Android 26+中,notification channels已经推出,如果您的应用定位到26及以上(我曾经是),则需要https://github.com/christophediericx/ArduinoSketchUploader/blob/master/Source/ArduinoUploader/ArduinoSketchUploader.cs。因为我不假思索地更新了目标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)