iphone: Установить значок на панели вкладок при получении PUSH-сообщения, когда приложение неактивно

#iphone #apple-push-notifications

#iPhone #apple-push-уведомления

Вопрос:

У меня есть приложение, которое использует PUSH. Но у меня есть одна проблема, когда приложение неактивно / в фоновом режиме. Когда приходят PUSH-сообщения и пользователь нажимает «Закрыть», значок устанавливается на значок приложения.

Но я также хочу установить значок на TabBarItem. У меня есть этот код, который сохраняет PUSH

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
  if (application.applicationState == UIApplicationStateInactive) {
    //Save the PUSH until the app is active.
    newPush = [userInfo copy];
  }
}
  

И в:

 - (void)applicationDidBecomeActive:(UIApplication *)application
  

У меня есть следующий код:

 //Check if there is new PUSH messages.
if (newPush!=nil) {
  //There is a new PUSH!
  NSInteger badge = [[[newPush objectForKey:@"aps"] objectForKey:@"badge"] intValue];
  if (badge > 0) {
    //Set badge-numbers to 'badge'
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badge];
    [[[[[self tabBarController] tabBar] items] objectAtIndex:3] setBadgeValue:[NSString stringWithFormat:@"%d",badge]];
  }
  else {
    //Set badge-numbers to zero
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    [[[[[self tabBarController] tabBar] items] objectAtIndex:3] setBadgeValue:nil];    
  }
}
  

Мой код для обработки нажатия, когда приложение активно, работает нормально, и значки устанавливаются как на иконке приложения, так и на панели вкладок.

Кто-нибудь знает, что не так?

Заранее спасибо!

Комментарии:

1. Я почти уверен, что вы не получите уведомление didReceiveRemoteNotification, если приложение не активно. Или при нажатии открыть в предупреждении

Ответ №1:

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

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions {

    NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];

    //Accept push notification when app is not open
    if (remoteNotif) {      
        [self handleRemoteNotification:application userInfo:remoteNotif];
        return YES;
    }

    return YES;
}