可以使用推送通知在不通知用户的情况下运行代码吗?

Posted

技术标签:

【中文标题】可以使用推送通知在不通知用户的情况下运行代码吗?【英文标题】:Can push notifications be used to run code without notifying user? 【发布时间】:2012-08-08 09:02:40 【问题描述】:

我有一个应用程序需要每 24 小时与服务器通信一次(以刷新它的数据)。即使应用没有打开,也没有在后台,这需要发生。

理想情况下我想要的是:

我的服务器每 24 小时向 iPad 发送一次推送通知 这会唤醒应用,并运行刷新数据所需的代码 通知随后被丢弃

这有可能吗? 应用程序是否仅在用户单击通知后才被唤醒?或者我可以在显示通知之前运行一些代码吗? 我什至可以丢弃通知消息吗?

如果推送通知不是执行此操作的正确方法,那是什么???

谢谢各位!

【问题讨论】:

【参考方案1】:

随着 ios 7 的发布,这终于可以使用远程/静音通知。它们的工作方式与推送通知相同,但它们可以启动后台获取模式并上传/下载新内容,而不是立即提醒用户。

这里是简单教程:http://www.objc.io/issue-5/multitasking.html

【讨论】:

【参考方案2】:

这只有在您的应用程序是报亭应用程序时才有可能,如果是,您可以每 24 小时发送一次带有content-available: true 的推送通知。

如果它不是报亭应用,您可以改为使用 GPS 围栏来运行代码。如果用户希望在用户靠近某个区域(即他们的家/工作场所)时更新应用程序,则允许用户设置 GPS 围栏。这将唤醒应用程序,然后您可以运行后台下载。例如 Instapaper 就是这样做的。

【讨论】:

谢谢 HN。所以确认一下,如果我发送推送通知,在用户点击通知消息之前,应用程序不会运行任何代码? 如果它是一个报亭应用程序,您可以在没有任何用户干预的情况下运行代码。你可以在这里阅读:developer.apple.com/library/ios/#documentation/StoreKit/… 很遗憾,它不是报亭应用。 那你需要使用GPS解决方案。除此之外没有其他办法。 好的。非常感谢。我将把问题留得更久,看看是否有其他人有任何其他反馈,如果没有,我会将其标记为您已回答。【参考方案3】:

如果时间段始终为 24 小时,您可以使用本地通知而不是推送通知。

除非用户打开推送通知,否则您的应用将无法运行任何代码,推送通知由操作系统处理,并且您的应用在它不活动或在后台无法控制它们时,您应该看看在the push notification programming guide

完成您尝试做的事情的另一种方法是每次启动应用程序并且上次更新发生在 24 小时前时从服务器获取数据,

    每次联系服务器时,将日期保存在 NSUserDefault 中 每次用户打开应用程序时,检查最后一次服务器联系是否发生在 24 小时之前,然后刷新数据

【讨论】:

谢谢艾哈迈德。这种方法的问题是(a)我不希望任何用户交互(即本地通知不起作用)和(b)应用程序需要在用户打开应用程序之前同步(因为用户通常使用他们没有互联网连接的应用程序)。不过感谢您的建议。 参考:developer.apple.com/library/ios/documentation/Performance/…【参考方案4】:

可以使用所谓的 VOIP 推送通知。此通知可以在后台运行代码,即使应用程序完全关闭。

【讨论】:

以上是关于可以使用推送通知在不通知用户的情况下运行代码吗?的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin - 如何在不使用其他服务的情况下发送推送通知

是否可以在不构建任何应用程序的情况下向 Android 发送推送通知?

在不运行应用程序或发送推送通知的情况下标记 iOS 应用程序?

在 ios 中发送所有用户推送通知

如何在不使用php循环的情况下同时向ios设备发送1000条推送通知

有没有办法在不使用通知服务扩展的情况下将图像附加到推送通知?