IOS unregisterForRemoteNotifications在飞行模式下不工作

IOS unregisterForRemoteNotifications在飞行模式下不工作,ios,apple-push-notifications,Ios,Apple Push Notifications,我的应用程序中的一个功能是在用户从应用程序注销时从远程推送通知中注销用户。当设备处于飞行(脱机)模式时,当用户注销时,有没有办法从推送通知中注销应用程序 我试过这段代码,但当我重新上线时仍然会收到通知, [[UIApplication sharedApplication]注销远程通知] 当设备处于飞行模式时,有人能帮助从通知中心删除应用程序吗 在调用时添加一个标志或类似的东西(可以随意调用,比如ShouldRecallUnregister) [[UIApplication sharedAppli

我的应用程序中的一个功能是在用户从应用程序注销时从远程推送通知中注销用户。当设备处于飞行(脱机)模式时,当用户注销时,有没有办法从推送通知中注销应用程序

我试过这段代码,但当我重新上线时仍然会收到通知, [[UIApplication sharedApplication]注销远程通知]


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

在调用时添加一个标志或类似的东西(可以随意调用,比如ShouldRecallUnregister)

[[UIApplication sharedApplication]注销远程通知]

如果没有internet连接,则设置为“是”,如果取消注册有效,则保留为“否”

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


如果是,请调用
[[UIApplication sharedApplication]unregisterForRemoteNotifications]苹果控制远程推送通知。如果脱机,则逻辑上无法禁用它。当苹果第一次看到你在线并且推送未被禁用时,它会向你发送推送。没有办法阻止iDevice显示苹果发送给用户的推送,因为它不在应用程序的手中

因此,只有一种可能性:在设备再次联机后,您必须立即禁用推送。但这仍然是一个运气的问题,苹果首先得到的信息是,你是在线的还是禁用了推送。还有一个问题,苹果想在设备离线时发送给它的通知会发生什么变化。它会在联机时重新发送它们,还是在第一次禁用时丢弃它们?我不知道。你需要做研究

所以你唯一的机会就是当用户上网时,你的应用程序在后台。为了能够响应系统通知,您需要防止应用程序被挂起(如何实现)。您需要的通知是更改联机状态的通知,我只知道它存在。可能会有帮助。因此,当设备联机时,它将通知在后台等待的应用程序(未挂起)。然后,您可以立即取消注册frm远程推送


这是你在这个方向上可能达到的最好成绩。希望这有帮助。

您不需要连接到internet才能注销吗?@DGund我也有同样的误解,但实际上您需要联机才能成功注销通知。如果您在没有连接的情况下取消注册,您仍然会收到通知。这样,您将在airplanemode关闭和应用程序激活的时间段内收到更多通知。感谢您提供的解决方案。unregisterForRemoteNotifications没有事件回调来跟踪注销是否成功?。有没有办法跟踪它?@r此解决方案可能不符合我的要求,因为一旦用户注销应用程序,我就不会收到通知。在此解决方案中,只有当用户重新启动或将应用程序置于前台时,取消注册才会完成。到那时为止,我们仍然收到通知。还有更好的方法吗?嗯,我看不到更好的方法,主要是因为如果用户在飞行模式下注销,然后离开应用程序,你将无法在通知到达时处理通知,因为你的应用程序将处于非活动模式。。。否则我会说使用DidReceivereMotenofication,但这在这里是没有用的。。也许您应该只在网络可用时才允许用户断开连接。这不是一个很坏的做法,因为网络必须处于活动状态才能重新连接。。目前,我看不到任何其他解决方案。。如果我有什么想法,我一定会告诉你的。你说的“退出应用程序”是什么意思?应用程序不在前台,或者您没有登录到应用程序连接的某个在线服务?