远程通知到达时哪个代表首先调用,而我的应用程序处于终止模式(不在后台)

Posted

技术标签:

【中文标题】远程通知到达时哪个代表首先调用,而我的应用程序处于终止模式(不在后台)【英文标题】:Which delegate called first when remote notification arrived, while my app is in killed mode(not in background) 【发布时间】:2018-07-04 06:08:08 【问题描述】:

Motive:- 我想存储通知的有效负载,当应用程序接收到通知时,它不是处于后台模式或被杀死模式。

问题:- 应用程序在终止模式下收到通知时没有委托调用。请建议在这种情况下该怎么做。

【问题讨论】:

看看这个***.com/questions/35058870/… 【参考方案1】:

当应用程序被杀死或退出时,您不能这样做。但是您可以在再次打开应用程序时检索传递的通知并处理它们。您可以使用以下流程获取通知。

UNUserNotificationCenter.current().getDeliveredNotifications  notifications in

    for aNoitfication in notifications
    
        let payload = aNoitfication.request.content.userInfo
        //process the payload
    
    DispatchQueue.main.sync  /* or .async  */ 
        // update UI
    

P.S:仅适用于 ios 10 或更高版本

【讨论】:

【参考方案2】:

来自 Apple 文档(UNUserNotificaitonCenter 框架 iOS 10+)...

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) 
    print("didReceive \(response.notification.request.content.userInfo)")

仅当应用程序在前台时,才会在委托上调用该方法。如果方法未实现或处理程序未及时调用,则不会显示通知。应用程序可以选择让通知呈现为声音、徽章、警报和/或在通知列表中。此决定应基于通知中的信息是否对用户可见。

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 

    print("willPresent: \(notification.request.content.userInfo)")
    completionHandler([.alert, .badge, .sound])

当用户通过打开应用程序、关闭通知或选择 UNNotificationAction 来响应通知时,将在委托上调用该方法。必须在应用程序从 application:didFinishLaunchingWithOptions: 返回之前设置委托。

【讨论】:

以上是关于远程通知到达时哪个代表首先调用,而我的应用程序处于终止模式(不在后台)的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如果应用程序在后台并到达本地通知;哪个方法会自动调用?

在 ios 中处理远程通知接收

当应用程序进入前台时,哪个View Controller处于活动状态?

在 iOS 上为远程推送通知的通知操作调用 Web 服务

当应用程序处于后台时,在 iOS appDelegate didReceiveRemoteNotification 中调用 lambda 函数

应用程序处于后台时未收到后台获取远程通知,并且用户未通过推送通知进入