【问题标题】:APNS Silent Remote Notification not triggering - SWIFT 3APNS 静默远程通知未触发 - SWIFT 3
【发布时间】:2018-04-21 15:44:12
【问题描述】:

场景:

1) 应用在前台时的静默或正常负载:

  • 什么都没有发生

2) 应用在后台时的静默负载:

  • 什么都没有发生

3) 应用在后台时的正常负载:

  1. 如果用户点击通知打开应用程序。

    • 触发application:didReceiveRemoteNotification:fetchCompletionHandler
  2. 如果用户点击应用图标打开应用:

    • 什么都没有发生

这些是我用于 APN 的有效负载:

正常负载:

{  
  "aps":{  
    "alert":"andre test",
    "badge":0,
    "sound":"default",
    "content-available":1
  },
  "acme-syncalarm":"true"
} 

静默负载:

{  
  "aps":{  
    "content-available":1
  },
  "acme-syncalarm":"true"
}

我已经使用以下代码实现了远程推送通知:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    print("Receeeeeeeeived: \(userInfo)")
    UIApplication.shared.applicationIconBadgeNumber = 11

    completionHandler(.newData)
}

我还实现了这个来检查应用程序是否正在从终止状态中恢复(正如我在一些问题中所读到的那样),但代码从未进入 print(rn)line。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        if let rn = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] {
            print(rn)
        }
 }

编辑 1 - 我还为应用程序启用了后台模式下的远程通知。

我必须做什么才能涵盖“什么都没有发生”的情景? 1、2和3.2?

【问题讨论】:

  • 你用的是什么iOS版本?
  • 如果您使用的是 iOS 11,请将您的 iPhone 连接到您的 Mac,并在您发送推送时观察设备日志记录。在设备日志中搜索术语 pushLaunch 并发布它的内容。
  • 11.1 ...我刚刚更新到 11.1.1 但现在我必须更新我的 Xcode 以再次测试...:/ 我忘记了我不应该在 Xcode 之前更新手机。 ..

标签: ios swift swift3 apple-push-notifications ios11


【解决方案1】:

一些注意事项:

  • “如果用户单击应用程序图标打开应用程序:没有任何反应”

  • 普通负载不会有任何名为content-available 的键。所以这又是一个无声的通知。你能先看看我的回答here吗?

一些建议:

  • 确保您已在后台模式下启用远程通知。像这样:

  • 另见here。 iOS 11 初始版本存在静默通知问题。确保您有最新版本的测试,否则将无法正常工作。如果您有 iOS 10 设备,请先尝试使用该设备进行测试...

  • 确保您的设备上有后台应用刷新和通知。要查看如何操作,请参阅我的链接答案。

  • 您是自己创建负载还是使用 FireBase?如果您使用的是 Firebase,那么某些键会发生变化……您必须进行相应调整。

  • 确保您已将某些对象设置为 delegateUNUserNotificationCenterDelegate,例如:

UNUserNotificationCenter.current().delegate = delegateObject

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    let content = notification.request.content
    // Process notification content

    completionHandler([.alert, .sound, .badge]) // Display notification as regular alert and play sound
}

here复制的代码。

如果您不这样做,那么当应用处于前台时,您将不会显示任何通知。这应该可以解决应用程序何时处于前台并且您收到正常远程通知的问题。

【讨论】:

  • 我自己在我的服务器中创建了有效负载,对于普通的 APN,它运行良好
  • 在您的问题中,您说它不适用于普通 APN,即在您的场景 1 中。它是否有效?
  • 当前台不工作时...只在后台工作而不是静音时
  • 在这里做一些测试,我只实现了application:didReceiveRemoteNotification:fetchCompletionHandler,现在正在工作。似乎问题确实是最初的 iOS 11 版本。现在有了 iOS 11.1.1,这个问题就不再存在了
猜你喜欢
  • 2016-09-30
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
相关资源
最近更新 更多