我遇到的问题是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>
如果需要更多信息,请与我们联系。提前谢谢。
答案 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)