当Flutter应用终止时,正常的推送通知会静默显示或根本不显示

时间:2020-05-21 20:29:22

标签: node.js firebase flutter push-notification firebase-cloud-messaging

我在nodejs上使用firebase-admin向用户发送推送通知: https://firebase.google.com/docs/admin/setup

我在flutter上使用firebase_messaging: https://pub.dev/packages/firebase_messaging

我正在尝试在android和ios上发送具有最高优先级的推送通知。

firebase.messaging(firebaseApp).send({
    token,
    notification,
    android: { priority: 'high' },
    apns: { headers: { 'apns-priority': '10' }, payload: { aps: { sound: 'default' } } },
    data
}

在我的开发设备上,当应用程序在后台运行或终止时,它都像一种魅力。

在Android和ios上,我都收到推送通知,这些通知在100%的时间内明显弹出并发出声音。

问题出在其他设备上-

如果应用程序在后台运行,有时我会看到实际的推送通知突然弹出,并发出应有的声音。有时不是。

如果该应用程序终止,则会收到一个推送通知-但它不会弹出或发出声音,只有从屏幕顶部向下滚动菜单时,我才能看到它,列为已接收推送通知。 有时根本没有收到通知。

我也尝试将通知的优先级从我的应用程序更改为实际设备上的高优先级,但没有任何改变。

我的用户一直抱怨他们没有收到推送通知-我猜测他们要么实际上没有收到通知,要么就是根本看不到它们,因为如上所述,他们被默默地收到了。

我真的不知道发生了什么,为什么在我自己的开发设备以外的设备上无法正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

当我们从Firebase API发送推送消息时,有两个标记需要保持完整

  1. 优先
  2. android_channel_id

如果android 7.0或8.0以上版本的设备未收到android_channel_id,则它将不会显示通知,因此请始终在android清单中设置默认通知渠道。 我们可以检查通过节点设置的json请求中的可用标签。 from here

<meta-data
    android:name="com.google.firebase.messaging.default_notification_channel_id"
    android:value="@string/default_notification_channel_id"/>

像这样,并确保您在移动端创建了通知渠道。

String CHANNEL_ID = "your_channel id";
String CHANNEL_DESCRIPTION = "Your description to show in settings";


NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_DESCRIPTION, NotificationManager.IMPORTANCE_HIGH);
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(channel);

如果您看到flutter应用程序日志,它将显示一些错误,例如清单中未设置默认频道或通知中未找到频道。

确保您在问题中添加日志以解决此问题,或与我联系以解决问题。

还要确保您阅读 来自here fcm flutter lib可选处理背景消息部分 在那里他们提到在Android文件夹中添加fcm。