2013-12-10 2 views
2

Я использую APNS в своем приложении iOS. Я получаю уведомления Apple push on на переднем плане, но когда мое приложение переходит в фоновом режиме или в неактивный режим, мое приложение не получает никаких push-уведомлений.Как получить уведомление APNS push в фоновом режиме в iOS6?

Мой код, который я попробовал это следующим образом:

- (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]; 
    } 
} 

Пожалуйста, скажите мне, где я неправильно или что-то отсутствует.

ответ

2

Вы не должны отображать уведомление программно, когда приложение находится в фоновом режиме или неактивно. iOS отображает текст словаря alert словаря aps автоматически, когда приложение находится в одном из этих состояний, а ваш код вызывается только после того, как уведомление отображается и отображается пользователем, чтобы открыть приложение.

Если пользователь не открывает ваше приложение, нажав на уведомление, ваш код никогда не будет вызываться. Кроме того, метод didReceiveRemoteNotification вызывается только в том случае, если приложение активно или работает в фоновом режиме. Если он не запущен, вызывается другой метод - application:didFinishLaunchingWithOptions.

+0

Ok Эран, я изменил мой код выглядит следующим образом: - (Недействительными) применение: (UIApplication *) применение didReceiveRemoteNotification: (NSDictionary *) USERINFO { NSDictionary * apsInfo = [USERINFO valueForKey: @ "АПС"]; NSString * fv = [[apsInfo valueForKey: @ "alert"] componentsJoinedByString: @ ""]; UIAlertView * alert = [[UIAlertView alloc] initWithTitle: сообщение «Alert»: fv delegate: self cancelButtonTitle: @ «Ok» otherButtonTitles: nil, nil]; [alert show];}, но затем также не вижу никаких уведомлений в фоновом состоянии. Любой ключ –

+0

@Eran: «Если он не запущен, вызывается другой метод». Другой метод? Это было бы очень полезно для других, которые пришли сюда, если бы вы могли указать этот метод. –

+1

@ S.Philip Спасибо за комментарий, я обновил ответ. – Eran

Смежные вопросы