我的应用程序中的一项功能是在用户从应用程序注销时从远程推送通知中注销用户。当设备处于飞行(离线)模式时用户注销时,有没有办法从推送通知中取消注册应用程序?
我尝试了此代码,但当我重新联机时仍然收到通知,[[UIApplication sharedApplication] unregisterForRemoteNotifications];
当设备处于飞行模式时,有人可以帮助如何从通知中心删除应用程序吗?
我的应用程序中的一项功能是在用户从应用程序注销时从远程推送通知中注销用户。当设备处于飞行(离线)模式时用户注销时,有没有办法从推送通知中取消注册应用程序?
我尝试了此代码,但当我重新联机时仍然收到通知,[[UIApplication sharedApplication] unregisterForRemoteNotifications];
当设备处于飞行模式时,有人可以帮助如何从通知中心删除应用程序吗?
Apple 控制远程推送通知。如果您处于离线状态,您在逻辑上无法禁用它。当 Apple 第一次在网上看到您并且推送未被禁用时,它会向您发送推送。没有办法阻止 iDevice 显示苹果发送给用户的推送,因为它不在应用程序的手中。
所以只有一种可能性:您必须在设备再次上线后立即禁用推送。仍然是一个运气问题,Apple首先获得什么信息,您在线或您禁用推送。还有一个问题,苹果想要在设备离线时发送给设备的通知会发生什么。它会在在线时重新发送它们还是在首先禁用时丢弃它们?我不知道。你需要做研究。
所以你唯一的机会是当用户上网时你的应用程序在后台。为了能够响应系统通知,您需要防止您的应用程序被暂停(这里是如何实现的)。您需要的通知是在线状态更改的通知,我只知道它存在。此资源可能会有所帮助。因此,当设备上线时,它会通知您的应用程序在后台等待(未挂起)。然后,您可以通过立即取消注册 frm 远程推送来做出反应。
这是你在这个方向上可能取得的最好成绩。希望这可以帮助。
当你打电话时,添加一个标志或类似的东西(随便你怎么称呼它,比如ShouldRecallUnregister)
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
如果没有互联网连接,则设置为“是”,如果取消注册有效,则将其设置为“否”。
将其存储在UserDefaults ( [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];
) 中,并检查其值,applicationDidBecomeActive:
例如(或最适合您的应用的任何位置)。
如果是,请[[UIApplication sharedApplication] unregisterForRemoteNotifications];
再次调用。