我已将推送通知设置到我的新应用中。我听说这不是一个好方法,但我使用以下方式获取设备令牌:
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken
{
NSString *deviceToken = [[newDeviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
deviceToken = [deviceToken stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"###### DEVICE TOKEN = %@ #########",deviceToken);
}
对我来说一切都没问题,但是我使用这个令牌登录用户进入我的基地,但是我遇到了一个问题:如果用户拒绝接收推送通知,我怎样才能获得设备令牌?如何在App Delegate外部获取设备令牌?
答案 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获取设备令牌。