【问题标题】:Does iOS stop delivering silent push notifications if the user ignores too many by not opening the app?如果用户通过不打开应用程序忽略了太多,iOS 是否会停止发送静默推送通知?
【发布时间】:2013-11-18 11:34:03
【问题描述】:

我们对 iOS 推送通知还比较陌生,与 Apple 一样,该解决方案的优雅给我留下了深刻的印象,但也对该功能的一些不透明的“幕后”管理感到有点愤怒行为。

我的问题是这样的: 10 个单独的静默推送通知,以每小时 1 个的速度发送,直到最终由我们的测试用户打开后,才向我们的测试应用程序发送更多通知。基于此,如果 iOS 确定某个应用未在使用中,它似乎可能会停止发送静默推送通知。这是预期的行为吗?有谁知道 Apple 为此使用的启发式算法的任何粗略细节?

感兴趣的测试详情

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

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

结果:

  1. 在前 10 个小时内一切正常。在此之后,该应用不再收到任何通知。

通知格式(手动复制,如有错误请见谅):

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

【问题讨论】:

  • 好的,有人刚刚问我们为什么要设置徽章,这是一个有效的问题。这样做也不是我们的意图,但似乎我们一直在使用徽章 = 2 运行测试。我们将在没有徽章的情况下重复测试。一旦我们完成了测试,我会更新,但同时有兴趣听到任何其他 cmet。

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


【解决方案1】:

几个月前我对我的应用的推送功能做了很多测试,我的一些经验在这里:

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

现在,就您的问题进行一些讨论:

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

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

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

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

【讨论】:

  • 那么,如果应用程序在后台,就不可能向应用程序发送(静默)推送通知,让它对其作出反应?
  • 如果你想要app在后台的时候静音推送,可以在通知payload中设置“sound”元素为空,或者添加一个“silent”声音文件并使用:developer.apple.com/library/ios/documentation/…跨度>
  • 在我看来,这个问题是关于 iOS7 静默推送的。无论状态如何,应用都应该收到它。
  • 您可以发送静默推送通知,并让应用程序对其做出反应,即使它已被后台处理并处于休眠状态。您将有 30 秒的时间做出反应。为此,您需要启用“远程通知”,并在通知上使用“内容可用”标志。请注意,iOS 7.0 存在许多您可能需要解决的获取错误,而且如果用户在任务切换器中终止了您的应用程序(或从未运行过它),那么它可能无法正常工作。
【解决方案2】:

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

  1. 您的应用在您不注意时崩溃了,
  2. 用户已强制关闭您的应用,
  3. 系统已重新启动。

这些是您的应用将不再启动以接收后台通知的唯一情况。现在您需要调试其中哪一个适用。

【讨论】:

    猜你喜欢
    • 2016-03-24
    • 2018-07-23
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 2015-08-19
    • 2018-02-17
    相关资源
    最近更新 更多