gpt4 book ai didi

ios - 静默推送未传送到 iOS 11 上的应用程序

转载 作者:IT王子 更新时间:2023-10-29 07:26:42 26 4
gpt4 key购买 nike

我注意到在 iOS 11 beta 2 上,静默通知不会发送到 application:didReceiveRemoteNotification:fetchCompletionHandler无论应用程序的状态如何(后台/前台)。

我实现了 UIApplicationDelegete方法 application:didReceiveRemoteNotification:fetchCompletionHandler我发送以下无声推送

{  
"aps": {
"content-available": 1
},
"mydata": {
"foo": "bar"
}
}

但是在 iOS 11 上没有调用委托(delegate)方法。

它适用于其他版本的 iOS 和文档部分 Configuring a Silent Notification没有提到应该做任何其他事情。

这是 iOS 11 中的错误还是我错过了 iOS 11 中的新功能?

请注意,我不是在谈论或使用 UserNotification发送静默推送不需要的框架。

这是一个 sample project这说明了这个问题(您必须设置自己的捆绑 ID)

当您完成示例项目并将上述有效负载发送到应用程序时,您可以使用 macOS 控制台查看推送是否正确发送到设备而不是应用程序。

更新 10.08

行为似乎是随机的。有时在重新启动设备后,有效载荷会正确传递,但一段时间后它会停止工作。

正如您在以下屏幕截图中看到的,标记为 1 的推送仅传送到设备,推送 2(设备重启后)也传送到应用程序。

enter image description here

更新 14.08 - iOS 11 Beta 6

还是一样的行为。另一件应该有效但无效的事情是以下内容。当应用程序的方案设置为“等待可执行文件启动”时,静默推送应该唤醒应用程序并在后台启动它。

enter image description here

更新 21.08 - iOS 11 Beta 7

仍然是相同的行为,而不是错误报告中来自 Apple 的更新。

更新 29.08 - iOS 11 Beta 8

还是一样的问题。我现在使用的重现步骤如下:
  • 在Xcode项目方案中,选择“等待可执行文件启动”
  • didReceiveRemoteNotification: fetchCompletionHandler中添加断点
  • 在设备上启动应用
  • 发送以上无声推送

  • 预期 :应用程序从挂起状态进入后台和 didReceiveRemoteNotification: fetchCompletionHandler被称为

    实际 : 什么都没发生

    更新 06.09 - iOS 11 Beta 10

    我仍然有同样的错误行为。来自 Apple 的票已更新为以下答案:

    Apple Developer Relations September 6 2017, 10:42 PM Engineering has provided the following feedback regarding this issue:

    We were able to get the sample app running and test the behavior. We didn’t see any issues when we tested this as described.

    Pushes aren't guaranteed to arrive to the app when it is running in the background, and the logs here indicate we don't believe the app is being used enough to launch it.

    We do see us delivering pushes from time to time when conditions are good.

    We believe this is behaving correctly.



    11.09 更新

    我的 Apple 错误报告已关闭并标记为 33278611 的副本仍然开放

    更新 13.09 - iOS 11 GM

    感谢 kam800 的评论(见下文),我做了更多的测试并得出了这些观察结果:

    iOS 11 中似乎有一个新的守护进程 dasd DuetActivitySchedulerDaemon要么完全丢弃数据推送要么延迟数据推送交付:

    交货推迟

    控制台日志
    default 13:11:47.177547 +0200   dasd    DuetActivitySchedulerDaemon CANCELED: com.apple.pushLaunch.net.tequilaapps.daylight:C03A65 <private>!   lifecycle   com.apple.duetactivityscheduler
    default 13:11:47.178186 +0200 dasd DuetActivitySchedulerDaemon Removing a launch request for application <private> by activity <private> default com.apple.duetactivityscheduler
    default 12:49:04.426256 +0200 dasd DuetActivitySchedulerDaemon Advancing start date for <private> by 6.5 minutes to Wed Sep 13 12:55:31 2017 default com.apple.duetactivityscheduler
    default 13:21:40.593012 +0200 dasd DuetActivitySchedulerDaemon Activity <private>: Optimal Score 0.6144 at <private> (Valid Until: <private>) scoring com.apple.duetactivityscheduler
    default 13:21:40.594528 +0200 dasd DuetActivitySchedulerDaemon Setting timer (isWaking=1, activityRequiresWaking=0) between <private> and <private> for <private> default com.apple.duetactivityscheduler

    延期交货问题
  • 当数据推送延迟并启动应用程序时,只有在到达交付日期时才会交付数据推送,可能是 future 几分钟。这完全违背了使用数据推送来保持新应用程序的内容为下一次发布做好准备的目的。我在这里再次引用 Apple 的文档:

  • "Silent notifications improve the user experience by helping you keep your app up-to-date, even when it is not running."


  • 两个数据推送被发送到暂停的应用程序,它们被 iOS 11 推迟,而不是直接唤醒应用程序。当到达交付时间时,只交付最后一次数据推送!之前的推送会丢失并且不会通过委托(delegate)方法传递,从而导致数据丢失。

  • 交货取消

    控制台日志
    default 13:35:05.347078 +0200   dasd    DuetActivitySchedulerDaemon com.apple.pushLaunch.net.tequilaapps.daylight:C03A65:[
    {name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Must Not Proceed, Score: 0.00}}
    ], FinalDecision: Must Not Proceed} scoring com.apple.duetactivityscheduler

    取消交货问题

    那么在这种情况下,数据推送完全丢失并且从未在 iOS 11 上交付,而在 iOS 10 上正确交付。

    更新 19.09 - iOS 11 GM

    我还注意到,当应用程序在前台并且通知没有传递到应用程序时,我在控制台中看到以下日志:
    default 08:28:49.354824 +0200   apsd    apsd    <private>: Received message for enabled topic '<private>' onInterface: NonCellular with payload '<private>' with priority 10 for device token: NO   courier-oversized   com.apple.apsd

    fault 08:33:18.128209 +0200 dasd Foundation <NSXPCConnection: 0x151eee460> connection from pid 55: Exception caught during decoding of received message, dropping incoming message.
    Exception: Exception while decoding argument 0 (#2 of invocation):
    Exception: value for key 'NS.objects' was of unexpected class 'NSNull'. Allowed classes are '{(
    NSArray,
    NSData,
    NSString,
    NSNumber,
    NSDictionary,
    NSUUID,
    _DASActivity,
    NSSet,
    _DASFileProtection,
    NSDate,
    NWParameters,
    NWEndpoint
    )}'. general com.apple.foundation.xpc

    最佳答案

    所以iOS 11.1 beta 1的发行说明说

    iOS 11.1 beta 1 was just released and they mention: "Notifications Resolved Issues • Silent push notifications are processed more frequently. (33278611)



    我做了一些测试,似乎确实修复了:

    暂停状态

    当我以暂停模式启动应用程序并发送静默推送时,应用程序将返回后台并且 didReceiveRemoteNotification:fetchCompletionHandler委托(delegate)被调用。

    前景状态

    同样,当应用程序在前台并发送静默推送时,委托(delegate)似乎按预期调用。这在之前的 iOS 11 版本中随机不起作用,所以我会在更多测试后确认这一点。

    关于ios - 静默推送未传送到 iOS 11 上的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44796613/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com