当 Flutter 应用程序终止时,普通推送通知会静默出现或根本不出现
Posted
技术标签:
【中文标题】当 Flutter 应用程序终止时,普通推送通知会静默出现或根本不出现【英文标题】:Normal Push Notifications appear silently or not at all when the flutter app is terminated 【发布时间】:2020-09-08 14:28:04 【问题描述】:我在 nodejs 上使用 firebase-admin 向用户发送推送通知: https://firebase.google.com/docs/admin/setup
我在颤振上使用 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
在我的开发设备上,无论是在应用程序在后台还是在应用程序终止时,它都像一个魅力。
我收到的推送通知在 100% 的时间里都会在 android 和 ios 上明显弹出并发出声音。
问题出在其他设备上 -
如果应用程序在后台,我有时会看到一个实际的推送通知明显弹出,并发出应有的声音。有时不会。
如果应用程序终止,则会收到推送通知 - 但它不会明显弹出也不会发出声音,如果我从屏幕顶部向下滚动菜单,我只能看到它,它被列为已收到推送通知。 有时根本没有收到通知。
我也尝试在实际设备上将我的应用的通知优先级更改为高,但没有任何改变。
我的用户一直抱怨他们没有收到推送通知 - 我猜他们要么实际上没有收到它们,要么根本看不到它们,因为正如我上面描述的那样,它们是静默接收的。
我真的不知道发生了什么以及为什么它不能在我自己的开发设备以外的设备上正常工作。
有什么想法吗?
【问题讨论】:
【参考方案1】:当我们从firebase api发送推送时,有两个标签需要完整
-
优先级
android_channel_id
如果 android 7.0 或 8.0 以上的设备没有收到 android_channel_id 则不会显示通知,因此请始终在 android manifest 中设置默认通知通道。 我们可以检查我们通过节点设置的 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。
【讨论】:
感谢您的回答。我没有意识到这一点,我很惊讶 firebase_messaging 颤振包没有涵盖这一点,如果确保推送通知传递如此重要的话。如何在颤振中创建频道?您的代码示例似乎不是来自颤振,如果我错了,请纠正我。我在 firebase_messaging 颤振包中找不到这样的选项。另外,似乎这可能涵盖android,那ios呢?日志 - 由于这不会发生在我的开发设备上,有什么方法可以从其他设备获取日志? 我试过了,没有任何改变。我添加了默认频道 ID,并按照以下内容在颤振中添加频道:***.com/questions/57783319/… 你需要在 android 代码本身中添加这些东西,我认为我认为还没有添加默认频道 ID。抱歉,我还没有尝试过频道,我总是发现自己在 android 代码本身周围徘徊。但试试这个答案***.com/a/62026611/4029614 我认为这可能有效并且还从节点发送相同的通知通道ID 我真的不认为除了重要性高之外,apns 会阻止您接收通知,但 apns 规则:10–立即发送推送消息。具有此优先级的通知必须触发警报.... 将此优先级用于仅包含内容可用键的推送通知是错误的。 5 - 在考虑设备电源考虑的时间发送推送消息。它们受到限制,在某些情况下无法交付。如果省略此标头,APNs 服务器会将优先级设置为 10。 所以不需要为ios设置重要性或声音,我猜ios会自动播放声音。无需您指定。以上是关于当 Flutter 应用程序终止时,普通推送通知会静默出现或根本不出现的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序在后台或终止时,iOS 设备不会推送通知。导航到下一个屏幕在 Flutter 的 IOS 设备中也不起作用?
当应用程序处于后台/终止并收到 FCM 通知时,如何在 Flutter 中显示本地通知?
Flutter - 推送通知到达时在应用程序图标上显示徽章编号