Swift:从远程通知中获取数据

时间:2018-01-30 05:10:35

标签: ios swift remote-notifications silent-notification

我有一个消息传递应用程序,它通过推送通知从服务器获取数据。 在下图中,您可以查看该过程并查看出现故障的位置:enter image description here

我已经对这个问题进行了很多研究,但没有得到通用的解决方案。

我得到的一个解决方案是使用静默通知discussed Here ,在数据显示之前获取并保存数据。但是一旦收到无声通知,我就没有找到如何显示应用代表的通知。

如果我在某个地方出现概念错误,请纠正我。

更新: 问题之一是应用程序:didReceiveRemoteNotification:fetchCompletionHandler:仅在

时调用
  1. app位于前台
  2. 用户点击通知
  3. 但是当用户没有点击通知时,应用程序:didReceiveRemoteNotification:fetchCompletionHandler:未被调用,我找不到保存数据的方法,通知中出现的内容。

2 个答案:

答案 0 :(得分:2)

有两个案例, 1)背景 2)封闭状态

如果应用位于Background State,您必须启用Background Fetch,然后当应用处于后台application:didReceiveRemoteNotification:fetchCompletionHandler:

时,系统会调用此方法

当用户使用closedkilled时,上述方法无效,您可以使用VoIP技术。

只要远程通知到达,就会调用

didReceiveIncomingPushWithPayload方法

You can find more details about VoIP here

答案 1 :(得分:1)

您的问题是“如果我正确的话,要在应用程序处于前台时从远程通知中获取数据”,您可以使用这两种方法从后台和前台应用程序模式的远程通知中获取数据。

//  Notification will present call back
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert, .sound, .badge])

    // Handle your data here
    print("Notification data: \(notification.request.content.userInfo)")
}

@available(iOS 10.0, *)
//  Notification interaction response call back
func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {

    // Handle your data here
    print("Notification data: \(response.notification.request.content.userInfo)")

}