【问题标题】:Swift: Getting Data from Remote notificationSwift:从远程通知中获取数据
【发布时间】:2018-07-08 21:58:33
【问题描述】:

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

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

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

如果我在某处概念上有错误,请纠正我。

更新: 问题之一是 application:didReceiveRemoteNotification:fetchCompletionHandler: 仅在

时调用
  1. 应用在前台
  2. 用户点击通知

但是当用户没有点击通知时,application:didReceiveRemoteNotification:fetchCompletionHandler:没有被调用,我找不到保存数据的方法,出现在通知中。

【问题讨论】:

  • 我不认为静默通知是您正在寻找的解决方案,因为如果我没记错的话,如果您的应用不在后台,它们将不会被调用。
  • 好吧,如果您认为我们可以通过其他方式达到所需的结果,请建议我解决方案。
  • 您可能希望将所需的数据存储在后端,并在应用程序进入前台后进行 API 调用以获取这些数据。
  • 你有没有为这个问题找到任何解决方案,因为即使我也面临同样的问题?

标签: ios swift remote-notifications silent-notification


【解决方案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)")

}

【讨论】:

    【解决方案2】:

    有两种情况:

    1. 背景
    2. 关闭状态

    如果应用在Background State,则必须开启Background Fetch,然后应用在后台时会调用该方法application:didReceiveRemoteNotification:fetchCompletionHandler:

    当应用程序被用户closedkilled 时,上述方法不起作用,您可以使用VoIP 技术。

    每当远程通知到达时都会调用didReceiveIncomingPushWithPayload方法

    You can find more details about VoIP here

    【讨论】:

    • 我希望这种方法是正确的,但对于 VOIP,我们唯一需要考虑的是我们的应用程序应该具有使用 VOIP 的功能。
    • application:didReceiveRemoteNotification:fetchCompletionHandler,仅在用户单击通知或应用处于前台时运行。如果用户关闭通知,我将无法获取数据。
    • application:didReceiveRemoteNotification:fetchCompletionHand‌​ler,当应用程序在后台时它也会调用。请使用后台获取检查远程通知
    猜你喜欢
    • 2018-05-03
    • 2015-04-20
    • 2014-08-14
    • 1970-01-01
    • 2022-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多