我想向iOS设备发送推送通知并实现以下行为:
如果应用程序位于前台,则在通知到达时立即触发DidReceiveRemoteNotification
并将通知添加到通知托盘中。
如果应用程序在后台运行,或者应用程序已在后台完全关闭,则在通知托盘中添加通知。
目前,如果我使用Data
有效负载,则可以得到触发DidReceiveRemoteNotification
的通知,但前提是未设置Notification
有效负载。一旦设置了Notification
有效负载,通知就会进入托盘,并且DidReceiveRemoteNotification
仅在用户点击通知并打开应用程序后才会触发。
如果没有Notification
有效负载,则在后台完全关闭应用程序后,不会(在通知托盘中或由应用程序)接收到通知。
我考虑过发送两个通知,一个带有Notification
有效负载,以确保无论应用处于什么状态(即使应用程序已完全终止),通知托盘都显示该通知,另一个带有{{1 }}有效载荷作为Data
,以在应用程序处于前台或正在运行时更新应用程序中的数据。仅仅发送2条通知只是为了实现某些直截了当的要求而感到不对。
答案 0 :(得分:0)
要在应用程序处于前台时拦截通知,您应实施:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
并在函数体中使用completionHandler
调用.alert
以使其正常显示
completionHandler(.alert)
这样,您将不会显示任何内容,并且可以访问此函数内的notification.request.content.userInfo