我想向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