IOS - 如何在注销时禁用推送通知?

时间:2013-12-03 08:06:09

标签: ios apple-push-notifications

我的应用在我的服务器登录时注册该帐户,以启用聊天的推送通知。但是我还没有在注销时实现帐户的注销,所以在这个时候,如果我使用相同的设备中的 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];
     }

4 个答案:

答案 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并在登录后重新注册是一个坏主意。原因很简单:如果用户使用另一个帐户登录,而您没有专门检查服务器中的令牌重叠,则该用户将开始收到重复通知。