1

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

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


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

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


}

对我来说一切都很好,但是我使用此令牌将用户登录到我的基地,但我有一个问题:如果用户拒绝接收推送通知,我如何获得设备令牌?如何在 App Delegate 之外获取设备令牌?

4

2 回答 2

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

于 2013-04-19T15:31:38.003 回答
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 获取设备令牌。

于 2013-04-19T09:27:20.517 回答