Как получить уведомление 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.