我的应用在我的服务器登录时注册该帐户,以启用聊天的推送通知。但是我还没有在注销时实现帐户的注销,所以在这个时候,如果我使用相同的设备中的 2 帐户进行登录,它可以接收通知两个帐户。同时,我的通知中心有一个POST服务,该服务从接收通知中心取消注册“login_name +设备令牌”。我应该在哪里打电话?我必须使用unregisterForRemoteNotifications
吗?我只想从推送通知中取消注册帐户+设备令牌,而不是永久禁用整个应用程序通知。
我可以将设备令牌保存在didRegisterForRemoteNotificationsWithDeviceToken
功能
$ [[NSUserDefaults standardUserDefaults] setObject:hexToken forKey:DEVICE_KEY];
然后,在注销时,调用我的POST函数“removeDeviceToken”,如
NSString *deviceToken = [userDefaults objectForKey:DEVICE_KEY];
if(deviceToken != NULL){
[self.engine removeDeviceToken:deviceToken];
}
答案 0 :(得分:24)
您可以通过调用
在应用程序中轻松启用和禁用推送通知要注册,请致电: registerForRemoteNotificationTypes:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
要取消注册,请致电: unregisterForRemoteNotificationTypes:
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
支票使用
启用或禁用iPhone推送通知尝试此代码
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone)
// Yes it is..
答案 1 :(得分:7)
我不确定我是否正确使用它,但如果您不想禁用该应用的推送通知,那么您不应该调用unregisterForRemoteNotifications。您可以做的是,当用户点击注销按钮时,您可以向服务器发出注销请求,然后从该帐户中删除notificationID,并在注销请求完成后,您只需在本地执行注销(更新UI等)。
有关评论的更多信息:
是的,首先,您应该在每次启动时调用registerForRemoteNotificationTypes方法,因为设备令牌可以更改。委托方法之后
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken
调用,您可以获取设备令牌并将其保存到NSUserDefault。这样,当用户登录时,您可以获取最新的设备令牌(如果已更改),并将其发送到您的服务器以添加到该帐户。
所以代码可能看起来像这样
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
NSString *newToken = [devToken description];
newToken = [newToken stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
newToken = [newToken stringByReplacingOccurrencesOfString:@" " withString:@""];
NSString *notificationID = [newToken description];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:notificationID forKey:@"notification_id"];
[prefs synchronize];
}
因此,现在当用户登录时,只需获取通知ID并将其发送到您的服务器
- (IBAction)userTappedLoginButton {
// Make your login request
// You can add the notification id as a parameter
// depending on your web service, or maybe make
// another request just to update notificationID
// for a member
NSString *notificationID = [[NSUserDefaults standardUserDefaults] objectForKey:@"notification_id"];
...
...
}
答案 2 :(得分:3)
使用Swift:
要注册,
UIApplication.shared.registerForRemoteNotifications()
要注销,
UIApplication.shared.unregisterForRemoteNotifications()
答案 3 :(得分:0)
通常,注销后取消registerForRemoteNotifications并在登录后重新注册是一个坏主意。原因很简单:如果用户使用另一个帐户登录,而您没有专门检查服务器中的令牌重叠,则该用户将开始收到重复通知。