2014-09-26 3 views
8

Я обновил свой Xcode до Xcode 6.0.1, теперь для устройства iOS 8 не происходит регистрации удаленных уведомлений. Он отлично работает для устройства iOS 7.Почему приложение не регистрируется для push-уведомлений в iOS 8?

Я добавил код в приложение делегата, как указано ниже:

//-- Set Notification 
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
{ 
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIRemoteNotificationTypeBadge 
    |UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert) categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; 

    NSLog(@"current notifications : %@", [[UIApplication sharedApplication] currentUserNotificationSettings]); 
} 
else 
{ 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
    (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)]; 
} 

Даже текущее уведомление присутствует, и она не равна нулю.

И все-таки ниже метод не вызывается:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 

Скриншот ниже объясняет, что я включен определенные параметры в фоновом режиме:

enter image description here

И уведомление, установленных в устройстве настройки для моего приложения.

ответ

16

Вам нужно позвонить

[[UIApplication sharedApplication] registerForRemoteNotifications]; 

в вашем пути кода iOS8, после регистрации параметров уведомления пользователя.

+2

Большое спасибо. Теперь приложение успешно регистрируется для push-уведомлений. – user1899840

13

Ниже код будет работать в iOS 8.0 Xcode 6.0 или новее, а также для версий ниже.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //This code will work in iOS 8.0 xcode 6.0 or later 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
    { 
     [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]]; 

     [[UIApplication sharedApplication] registerForRemoteNotifications]; 
    } 
    else 
    { 
     [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeNewsstandContentAvailability| UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 
    } 

    return YES; 
} 
5

Проверьте следующие шаги надеюсь, что это поможет вам

шаги 1 В didFinishLaunchingWithOptions

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
{ 
    //ios8 ++ 
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) 
    { 
     UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil]; 
     [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings]; 
    } 
} 
else 
{ 
    // ios7 
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotificationTypes:)]) 
    { 
     [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 
    } 
} 

Шаг 2

-(void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings // available in iOS8 
{ 
[application registerForRemoteNotifications]; 
} 
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
    NSString * token = [NSString stringWithFormat:@"%@", deviceToken]; 
//Format token as you need: 
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""]; 
token = [token stringByReplacingOccurrencesOfString:@">" withString:@""]; 
token = [token stringByReplacingOccurrencesOfString:@"<" withString:@""]; 
NSLog(@"%@",token); 
} 
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
// Handle your remote RemoteNotification 
} 

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error 
{ 
NSLog(@"Error:%@",error); 
} 
Смежные вопросы