Как получить уведомление APNS в фоновом режиме в iOS6?
Я использую APNS в своем приложении iOS. Я получаю уведомления Apple push on на переднем плане, но когда мое приложение переходит в фоновом режиме или в неактивный режим, мое приложение не получает push-уведомления.
Мой код, который я пробовал, выглядит следующим образом:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive) {
NSLog(@"active");
NSDictionary *apsInfo = [userInfo valueForKey:@"aps"];
NSString *fv=[[apsInfo valueForKey:@"alert"] componentsJoinedByString:@""];
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Active" message:fv delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}else if (state == UIApplicationStateBackground){
NSLog(@"background");
NSDictionary *apsInfo = [userInfo valueForKey:@"aps"];
NSString *fv=[[apsInfo valueForKey:@"alert"] componentsJoinedByString:@""];
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Background" message:fv delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}
}else{
NSLog(@"Inactive");
NSDictionary *apsInfo = [userInfo valueForKey:@"aps"];
NSString *fv=[[apsInfo valueForKey:@"alert"] componentsJoinedByString:@""];
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Inactive" message:fv delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alert show];
}
}
Скажите, пожалуйста, где я ошибаюсь или что-то не хватает.
Ответы
Ответ 1
Вы не должны отображать уведомление программно, когда приложение находится в фоновом режиме или неактивно. iOS автоматически отображает текст alert
словаря aps
, когда приложение находится в одном из этих состояний, и ваш код вызывается только после того, как уведомление отображается и отображается пользователем для открытия вашего приложения.
Если пользователь не открывает ваше приложение, нажав на уведомление, ваш код никогда не будет вызван. Кроме того, метод didReceiveRemoteNotification
вызывается только в том случае, если приложение активно или работает в фоновом режиме. Если он не запущен, вызывается другой метод - application:didFinishLaunchingWithOptions
.