1

我正在开发一个应用程序(仅限 iPAD),从用户“第一次”安装应用程序开始,每 3 天(业务需求)显示一个弹出框。我正在使用 NSTimer 来做到这一点。如果用户在三天前删除应用程序并重新安装应用程序,则实施中断。在这种情况下,3 天的计数器将重新启动。我知道使用 Date 可能不是一个好主意,因为用户可以从设置中更改它。

有没有办法让 NSTimer (或类似的东西)即使在应用程序被删除后也能继续运行?

NSTimer* msgTimer = [NSTimer scheduledTimerWithTimeInterval: 259200 target: self selector: @selector(showMsg:) userInfo: nil repeats: NO];
4

4 回答 4

7

我能想到的唯一方法是每次关闭应用程序时都会在钥匙串中保存最后一次通知时间的字符串表示。删除应用程序时不会清除钥匙串。虽然这在技术上是对钥匙串的滥用,但它可能会起作用,我怀疑你会遇到任何商店提交问题。

每当启动应用程序时,检查它是否是自上次安装以来首次启动(将此信息保存为默认值)。如果是第一次,请检查钥匙串时间戳,与当前时间戳进行比较,然后从那里开始。

假设用户删除了该应用程序并在第二天安装它。检查钥匙串,您会看到它在 23 小时前被删除,然后在减去 23 小时后启动计时器(因此它将在 2 天 1 小时内通知)。希望一切都说得通。

否则,如果应用程序通常连接到互联网,您可以使用某种服务器。

于 2013-08-01T16:54:35.627 回答
1

没有您的应用程序被沙盒化,当应用程序被删除时,您所做的任何事情都会消失。您需要某种网络服务的帮助来实现您想要的行为

于 2013-08-01T16:47:02.177 回答
0

您还可以使用iCloud 的键值数据存储来存储初始安装日期。如果您将日期存储在本地并从 iCloud 同步,那么用户将很难避免获取更新,除非他们远离 Internet。

当然,这取决于他们是否在设备上登录 iCloud,并且需要 iOS 5 或更高版本。

于 2013-08-01T17:50:54.390 回答
0

我不相信,但我可能是错的(有人可以纠正我)。即使有可能,尽管这听起来像是做这样的事情的坏方法。

使用本地推送通知来实现这样的事情怎么样?似乎很适合这种情况。

用于设置计划通知的相关 Appl 文档

于 2013-08-01T16:47:55.623 回答