取消注册推送通知
Posted
技术标签:
【中文标题】取消注册推送通知【英文标题】:Unregister Push notification 【发布时间】:2015-03-27 17:37:36 【问题描述】:我正在构建一个应用程序,其中我们有一个登录页面来验证用户。当用户通过身份验证(成功登录)时,他可以从我们的远程服务器接收通知。
我在 AppDeletegate.m 中编写了以下代码来注册推送通知:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
UIUserNotificationTypeBadge |
UIUserNotificationTypeSound);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
// Override point for customization after application launch.
return YES;
用户正在通过 APNS 接收推送通知,我对此没有任何问题。我的要求是,当用户注销/注销时(在我们的应用程序中单击注销按钮时发生),我希望现在停止推送通知。
我希望仅当用户尚未从我的应用程序中注销时,才能在设备(ios 设备)上接收推送通知。
注销上方表示只是从我的应用程序中注销而不是卸载该应用程序。
你能帮我实现上面的逻辑吗?
我确信其他应用程序一定在做类似的事情。以 Gmail 应用为例,当我没有在 Gmail 应用中登录时,我没有收到任何推送通知。
编辑: 我的问题的一种可能的解决方案是向服务器发送一个关于用户注销操作的标志并将该标志存储在该用户/设备那里,如果该标志设置为 ON,我将不会将推送通知从服务器发送到 APNS设备。
使用上述方法,如果设备上没有互联网连接并且用户注销会发生什么?
即使没有互联网,我也可以在应用程序内注销。 (我只是清除那里的所有 NSUserDefaults)。我正在使用以下代码注销用户:
// Reset user defaults
NSUserDefaults * defs = [NSUserDefaults standardUserDefaults];
NSDictionary * dict = [defs dictionaryRepresentation];
for (id key in dict)
[defs removeObjectForKey:key];
[defs synchronize];
有没有办法取消订阅类似的推送通知?
【问题讨论】:
你在使用 Parse 吗? 对不起,我没找到你 您是否使用 Parse.com 作为您的后端? 【参考方案1】:假设您有自己的服务器来存储推送令牌,您可以向服务器发送请求以禁用/撤销该特定设备的推送通知。
要回答您的编辑部分,无法确定用户是否无法连接到互联网。您可以将逻辑设置为仅在成功注销请求回调中清除NSUserDefaults
,或者在启动应用时执行同步操作等。
【讨论】:
以上是关于取消注册推送通知的主要内容,如果未能解决你的问题,请参考以下文章