通知iOS应用更新其内容

时间:2013-12-19 21:47:15

标签: ios networking grand-central-dispatch

如何通知iOS应用程序需要更新其内容?

我希望有一个应用程序可以侦听触发下载的更新警报,而不是执行数据请求以便能够与服务器保持同步。

让一个需要与服务器同步的iOS应用保持同步,同时最大限度地减少网络活动的正确方法是什么?

我知道在本地使用缓存,NSURL缓存或核心数据等并且遵守http标头中的超时等但我想正确设置同步机制而没有用户需要按下的更新按钮获得更新。

我曾想过在socket上实现dispatch_source,但是不会让网络保持活动状态并耗尽电池电量?

我不想请求令牌以便从服务器同步数据版本,而是希望服务器通知设备它需要更新。这有用吗?

操作系统如何处理监听推送通知?它是否在POSIX级别上?

2 个答案:

答案 0 :(得分:1)

据我所知,有两种常见的方法可以在iOS上执行此操作;

  1. 定期GetUpdates以一定间隔调用服务器(我认为在任何平台上都是相当标准的)
  2. Apple的推送通知服务器(APNS)如果服务器上有任何更改,您可以将通知推送到设备。
  3. 在工作中,我们通常会实施这两个选项,因为APNS存在一些问题;

    1. 无法保证他们到达设备,如果设备处于离线状态,APNS服务会将通知在限制时间内存储在转发它的APNS系统中(如果设备尚未过期)
    2. 如果在设备离线时发送了多个通知,则仅发送最新通知
    3. 如果设备离线足够长的时间,则所有存储的通知都将被丢弃
    4. 用户必须允许将推送通知发送到他们的设备,因为它可以用来确定设备的供应商和标识符

答案 1 :(得分:1)

你真的有两个选择:

  1. 客户端轮询:呼叫服务器并经常询问。对于99%的应用程序来说,这很好,因为在轮询之间的间隔期间,某人运行旧版本并不是什么大不了的事。

  2. 实时服务器推送:如果出于某种原因需要在推送新版本时立即禁用旧版本,则可以执行服务器端推送。你想要使用APNS(用户可能拒绝APNS,交付不保证等)。您可能希望使用像PubNub或Pusher这样的廉价推送服务来保证实时交付。或者使用这些服务的相同原则编码您自己的版本,但真的为什么要重新发明轮子?