ios - 后台和前台的 Firebase iOS 推送通知
问题描述
我想向 iOS 设备发送推送通知并实现以下行为:
如果应用程序在前台,则DidReceiveRemoteNotification
在通知到达时立即触发并将通知添加到通知托盘。
如果应用程序在后台或应用程序已在后台完全关闭,则将通知添加到通知托盘。
目前,如果我使用Data
有效负载,我可以获得触发通知,DidReceiveRemoteNotification
但Notification
前提是未设置有效负载。一旦我设置Notification
了有效负载,通知就会进入托盘,并且DidReceiveRemoteNotification
只有在用户点击通知并打开应用程序后才会触发。
如果没有Notification
负载,当应用程序在后台完全关闭时,不会收到通知(在通知托盘或应用程序中)。
我考虑过发送两个通知,一个带有Notification
有效负载以确保通知托盘显示通知,而不管应用程序处于什么状态(即使它已完全终止),另一个带有Data
有效负载作为Background Notification
更新应用程序中的数据时该应用程序处于前台或正在运行。发送 2 条通知只是为了达到一个相当直截了当的要求而感觉不对。
解决方案
要在应用程序处于前台时拦截通知,您应该实现:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
并在函数体调用completionHandler
中.alert
使其正常显示
completionHandler(.alert)
这样你就不会呈现任何东西,并且可以访问notification.request.content.userInfo
这个函数内部
推荐阅读
- cmake - 制作。无法获取目标输出文件名
- python - 填写熊猫数据框中的缺失值
- database-design - 为什么数据库系统不直接支持 1:M 和 1:1 关系?
- r - 如何在没有 Internet 访问的情况下在 AWS SageMaker 笔记本实例上安装 R 内核?
- c# - C# 中的 Fortran dll 给出无法找到入口点错误
- r - 整数上的随机游走 - 计算 R 中的“步数”
- javascript - 带有 Flask 的 iOS 上的 JSON POST
- django - API 端点中的多个过滤器参数 - DRF
- java - 更新表格中的图像
- angular - 使用组件输入参数访问 JSON 对象值