我正在构建一个应用程序,其中有一个登录页面来验证用户身份。当用户通过身份验证(成功登录)后,他可以从我们的远程服务器接收通知。
我在 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];
有没有办法取消订阅类似的推送通知?
最佳答案
假设您有自己的服务器来存储推送 token ,您可以向您的服务器发送请求以禁用/撤销该特定设备的推送通知。
为了回答您的编辑部分,无法确定用户是否无法连接到互联网。您可以将逻辑设置为仅在成功的注销请求回调中清除 NSUserDefaults
,或者在启动应用程序时执行同步操作等。
关于ios - 注销推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29306822/