IOS unregisterForRemoteNotifications在飞行模式下不起作用

时间:2012-10-09 15:49:26

标签: ios apple-push-notifications

我的应用程序中的一个功能是在用户从应用程序注销时从远程推送注销中取消注册用户。当用户在飞机(离线)模式下退出时,我是否可以通过推送通知取消注册应用程序?

我试过这段代码但是当我回到网上时仍然会收到通知, [[UIApplication sharedApplication] unregisterForRemoteNotifications];

当设备处于飞行模式时,有人可以帮助如何从通知中心删除应用程序吗?

2 个答案:

答案 0 :(得分:2)

Apple控制远程推送通知。如果您处于脱机状态,则逻辑上无法禁用它。当Apple第一次看到你在线并且没有禁用推送时,它会向你发送推送。没有办法阻止iDevice显示苹果发送给用户的推送,因为它不在应用程序的手中。

所以只有一种可能性:你必须在设备再次上线后立即禁用推送。而且这仍然是运气问题,Apple首先获得的信息,您是在线还是禁用推送。此外,还有一个问题是Apple在离线时想要发送给设备的通知会发生什么。它会在网上重新发送它们还是在首次禁用时丢弃它们?我不知道。你需要做研究。

因此,唯一的机会是,如果您的应用在用户上线时处于后台。您需要阻止您的应用被暂停(here's如何实现),以便能够响应系统通知。您需要的通知是在线状态的更改,我只知道它存在。 This resource可能会有所帮助。当设备上线时,它将通知您的应用程序在后台等待(未暂停)。然后你可以立即取消注册frm远程推送。

这是你在这方面可能取得的最好成绩。希望这会有所帮助。

答案 1 :(得分:0)

当你致电

时,添加一个标志或类似的东西(称之为你想要的任何东西,比如 ShouldRecallUnregister

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

如果没有互联网连接,则设置为YES,如果取消注册,则将其保留为NO。

将其存储在 UserDefaults [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];)中,并在applicationDidBecomeActive:中查看其值(或者在适合您应用的最佳位置)。

如果是,请再次致电[[UIApplication sharedApplication] unregisterForRemoteNotifications];