当应用程序未运行/注销时禁用苹果推送通知

Posted

技术标签:

【中文标题】当应用程序未运行/注销时禁用苹果推送通知【英文标题】:disable apple push notifications when application isn't running / logged out 【发布时间】:2011-12-21 01:33:16 【问题描述】:

我正在使用苹果推送通知为日间交易者使用的应用程序发送重要的买入和卖出建议——我遇到了一个小问题,我很惊讶我找不到。

我想在用户未登录或关闭应用程序时禁用推送通知。我想了几种方法来实现这一点,但似乎都不可行,所以我正在寻找通过 APNS 服务的解决方案。我的想法是:

    当用户登录时启用服务器推送,当用户注销时禁用它。这样做的问题是,如果应用程序崩溃或用户强制退出应用程序,推送将不会被停用

    保持会话,如果会话终止,则禁用推送通知。这样做的问题是他们可能已登录并且手机处于睡眠状态数小时,并且应用程序不会轮询服务器以保持该会话处于活动状态,但由于他们没有明确注销,我仍想发送这些推送。

有没有办法修改 APNS 有效负载说,如果应用程序没有运行,丢弃推送消息?这就是我想要的:)

非常感谢任何帮助!谢谢大家!

【问题讨论】:

我无法弄清楚您的要求。在 (1) 中,如果应用程序被终止,您希望通知停止,但在 (2) 中,您似乎在说,如果手机关机,您仍然需要通知。 如果应用崩溃了,他们不想要推送通知,他们不会重新启动它并退出吗? 仅当手机长时间处于睡眠状态但应用程序仍处于活动状态时,可以这么说。我希望发送推送通知的唯一方法是应用程序正在运行并登录。他们可能几天都不会打开应用程序,但如果他们登录并且应用程序仍在运行,我想发送它们。 @ceejayoz 有人希望如此,但我正在与那些在我们的桌面客户端没有收到通知并且甚至没有运行时感到惊讶的人打交道...... 只要设置应用程序是否运行时弹出通知即可。如果用户不想要它们,则会提示他登录并关闭它们。 【参考方案1】:

让应用每 5 分钟左右“ping”一次服务器,如果错过两次 ping,则停止发送通知。

【讨论】:

这是我首先要推送通知的部分原因——Apple 没有提供可靠的方法来在应用程序 didEnterBackground 时每 5 秒循环一次 ping。我认为在后台或睡着几分钟后,苹果不允许联网。如果我的想法错了,它会解决我的很多问题。

以上是关于当应用程序未运行/注销时禁用苹果推送通知的主要内容,如果未能解决你的问题,请参考以下文章

Apple 推送通知、注销应用和删除应用问题/解决方案

应用在前台时如何触发苹果推送通知事件?

当应用程序未运行时,使用推送通知的内容更新 SQLite

如果禁用 SNS 端点,为啥 SNS 无法发送推送通知?

当应用程序在后台运行时无法处理推送通知,接收推送但未点击横幅或警报

当应用程序未运行时,GCM 推送通知未在某些设备中显示