如果用户拒绝推送通知ios,则获取设备令牌

时间:2013-04-19 07:12:16

标签: ios6 apple-push-notifications

我已将推送通知设置到我的新应用中。我听说这不是一个好方法,但我使用以下方式获取设备令牌:

- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken
{


    NSString *deviceToken = [[newDeviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    deviceToken = [deviceToken stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSLog(@"###### DEVICE TOKEN = %@ #########",deviceToken); 


}

对我来说一切都没问题,但是我使用这个令牌登录用户进入我的基地,但是我遇到了一个问题:如果用户拒绝接收推送通知,我怎样才能获得设备令牌?如何在App Delegate外部获取设备令牌?

2 个答案:

答案 0 :(得分:1)

如果用户不同意接收推送通知,则无法获取设备令牌。方法

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
将调用

,但您无法从中获取令牌。

如果您正在寻找唯一标识符,则应考虑使用 identifierForVendor 。请参阅此处的文档:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/occ/instp/UIDevice/identifierForVendor

答案 1 :(得分:0)

即使用户拒绝接收推送通知,也会调用此方法。您可以使用UIRemoteNotificationType来获取用户选择。

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"My token is: %@", deviceToken);

    UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
    if (types == UIRemoteNotificationTypeNone){
        NSLog(@"User refused to receive push notifications");
    }else{
        NSLog(@"User agreed to receive push notifications");
    }
}

对于第二个问题,您无法在此回调之外从iOS获取设备令牌。