为iCloud和UILocalNotification更新安排iOS后台任务

时间:2013-11-08 14:00:17

标签: ios iphone objective-c cocoa uilocalnotification

我希望在我的应用中实施通知。该应用程序通过iCloud共享数据,通知将保存在 iCloud共享数据中。 (这是一个鞋盒应用程序。)

不幸的是,我没有资源来支持推送通知。

根据这份文件:

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/WhatAreRemoteNotif.html#//apple_ref/doc/uid/TP40008194-CH102-SW1

  

OS X中针对非运行应用程序的唯一推送通知类型是图标标记。

这仍然是这样吗?如果是这样,那没关系 - 我的正在运行 Mac应用程序已经能够(1)检测到iCloud更改,(2)确定是否为新本地通知需要调度或现有通知需要更新,以及(3)调度它们。所以添加推送支持并不是我想要的。

但是 - 我想知道如何从iOS方面解决这个问题。如果我在Mac上安排通知,并将其保存到iCloud,我的应用程序在iOS上如何在后台收到通知?

如果iOS应用程序位于前台,我可以确认一切正常。收到iCloud通知,加载数据,重新安排通知。

但是如果我的应用程序在后台,或根本没有运行,那么处理此问题的最佳方法是什么?我理解后一种情况是我很可能无法控制的情况。但如果应用程序在后台,请执行:

  1. 是否需要生成后台任务以定期检查数据更改?或者,

  2. 是否有可以订阅的通知,只有在iCloud数据发生变化时才会通知我?

  3. 我找到了fetch的{​​{1}}值,但我不确定这是我想要的 - 我不是在抓取,我只想回复,背景,对iCloud进行了更改。

2 个答案:

答案 0 :(得分:4)

您的选择有限。我认为如果你无法负担远程通知,后台提取实际上是一个很好的选择。通过后台获取,您的应用程序将以相对恒定的时间间隔唤醒,并且能够检查是否有新的通知要显示给用户(或已删除的通知等)。然后,您将能够更新本地通知以匹配。

答案 1 :(得分:1)

AFIK没有很好的办法去做你所要求的。背景提取可能是一种获得你想要的东西的方法,但它不会让你对它执行的时间或频率有任何真正的控制。

使用的正确机制是远程通知。

我知道您“没有资源支持推送通知”。您是否可以考虑提供免费套餐的BaaS提供商,并提供推送通知支持?我相信,ParseStackMob都提供此功能。