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

我的应用程序中的一个function是当用户从应用程序注销时,从远程推送通知中注销用户。 当设备处于飞机(离线)模式时用户注销时,是否可以通过推送通知取消注册应用程序?

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

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

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

所以只有一种可能性:在设备重新上线之后,必须立即禁用IMMEDIATELY。 还有一个运气问题,苹果首先得到什么信息,你是在线还是你禁用了推送。 另外还有一个问题,苹果想在离线状态下发送给设备的通知会发生什么。 无论如何在线时会重新发送,还是在第一次禁用时丢弃它们? 我不知道。 你需要做研究。

所以你唯一的机会是如果你的应用程序在后台,而用户上网。 您需要阻止您的应用程序被暂停(以下是如何实现这一点),以便能够响应系统通知。 你需要的通知是在线状态的变化,我只知道它存在。 这个资源可能有帮助。 当设备上线时,它会通知你的应用程序在后台等待(未暂停)。 然后您可以通过立即取消注册frm远程推送来做出反应。

这是你在这方面可能达到的最好的。 希望这可以帮助。

当你打电话时,添加一个标志或类似的东西(称之为ShouldRecallUnregister

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

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

将它存储在UserDefaults[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"]; )中,并检查其值applicationDidBecomeActive:例如(或任何适合您的应用程序的最佳位置)。

如果是,请调用[[UIApplication sharedApplication] unregisterForRemoteNotifications]; 再次。