'内容可用'通知并不总是发送到应用程序(didReceiveRemoteNotification)

时间:2017-07-13 06:29:56

标签: ios push-notification notifications apple-push-notifications background-fetch

我已将推送通知添加到我的应用中,通知随'content-available'一起发送。

我看到这种奇怪的行为(通常)5个通知中的2个未到达应用程序的application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)功能 但仅在未调试时< / EM>

是的,没错。如果我已经连接了调试器,那就有区别了。

在这种情况下,我总是会在didReceiveRemoteNotification中收到5个通知中的5个:

  1. 从Xcode运行应用
  2. 最小化
  3. 发送5个通知
  4. 请参阅5&#34;系统通知&#34;
  5. didReceiveRemoteNotification被召唤5次。
  6. 在这种情况下,我通常会在didReceiveRemoteNotification(有时4个)中收到3个通知中的3个。

    1. 从Xcode运行应用
    2. 拔下USB
    3. 最小化
    4. 发送5个通知
    5. 请参阅5&#34;系统通知&#34;
    6. didReceiveRemoteNotification被称为3-4次。
    7. 我的didReceiveRemoteNotification很简单:

      var received = 0
      
      func application(_ application: UIApplication,
                       didReceiveRemoteNotification userInfo: [AnyHashable : Any],
                       fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
          received += 1
          application.applicationIconBadgeNumber = received
          sleep(2) // do some "work", same behaviour with or without this line...
          completionHandler(.newData)
      }
      

      然后我只重置application.applicationIconBadgeNumberreceived中的applicationDidBecomeActivedidFinishLaunchingWithOptions

      • 是的,我发送通知&#34;快速&#34;。基本上我在for循环中用curl命令发送它们。
      • 如果我发送curl &(即并行开始),我会看到相同的行为
      • 如果我定期发送(不是并行),我会看到相同的行为
      • 如果我发送curl ; sleep(即在每个卷曲之间等待1秒)我得到所有这些
      • 我在sleep中添加的用于测试的didReceiveRemoteNotification并没有任何区别。 我的想法是,如果通知中包含&#39; content-availability&#39;在后台处理另一个时收到的,它会丢弃任何不发送任何内容可用性的内容。在此期间到应用程序。

0 个答案:

没有答案