如果用户因未打开应用程序而忽略太多推送通知,iOS是否会停止提供静默推送通知?

时间:2013-11-18 11:34:04

标签: ios iphone notifications push-notification apple-push-notifications

我们对iOS推送通知相对较新,而且与Apple一样,我对解决方案的优雅印象深刻,但对于该功能的一些不透明的“幕后”管理也略显激怒了行为。

我的问题是:成功收到约。 10个单独的静音推送通知,每小时一个,在我们的测试用户最终打开之前,我们的测试应用程序不再提供。基于此,如果确定应用未被使用,iOS可能会停止提供静默推送通知。这是预期的行为吗?有没有人知道Apple为此使用的启发式的任何粗略细节?

感兴趣的人的测试详情

仅供参考,我们的测试设置如下:

  1. 我们构建了一个简单的通知测试应用程序(使用application:didReceiveRemoteNotification:fetchCompletionHandler委托方法为iOS7构建)
  2. 在测试期间,应用程序在我们的测试iPhone 5的后台保持暂停状态(有时在办公室使用wifi,有时在伦敦及其周边的3G上)。
  3. 我们有一个简单的Ruby脚本使用Grocer gem(这似乎非常好)每小时通过Apple的沙箱APNS网关向应用程序发送静音推送通知。
  4. 当应用程序收到通知时,它会唤醒,写入日志并向我们的后端服务器发出一个简单的请求,该服务器也会记录已发生的事件。
  5. 结果:

    1. 前10个小时的一切都与预期完全一致。在此之后,应用程序不再收到通知。
    2. 通知格式(手动复制,原谅任何错误):

      aps = {
        badge = 2;
        "content-available" = 1;
      };
      

2 个答案:

答案 0 :(得分:4)

我几个月前对我的应用程序的推送功能做了很多测试,我的一些经验来自:

  
      
  1. Apple推送通知不关心您的应用是否在使用中。
  2.   
  3. APNS不是100%可靠,最有影响力的因素是网络质量(您的服务器到APN服务器,APN服务于您的设备)。
  4.   
  5. 我已经在3分钟内向iphone4s发送了10,000个通知,设备收到95%以上的通知。所以,10个单独的静音   以每小时一次的推送通知没有压力。
  6.   

现在,讨论一下你的问题:

首先:应该意识到通知的第一个接收者是系统,而不是你的应用程序。

如果你的应用程序不在前台,应用程序的应用程序:didReceiveRemoteNotification:fetchCompletionHandler永远不会被调用,直到你的应用程序再次进入前台。因此,您的“写日志并向我们的后端服务器发出简单请求”操作不适合“记录已发生的事件”。

我认为除非您的应用始终处于前台,否则没有一种“记录所有已发生事件”的好方法。

BTW:当您测试推送时,如果设备没有快速通知,您可以更改设备的网络(或关闭然后打开网络),有时,通知很快就会到来。

答案 1 :(得分:0)

我可以想象你所看到的行为的三个原因:

  1. 你的应用程序在你不看的时候崩溃了,
  2. 用户已强制关闭您的应用
  3. 系统已重新启动。
  4. 这些是您的应用程序将不再启动以接收后台通知的唯一情况。现在你需要调试哪一个适用。