2

У меня есть методы, описанные ниже для обработки push-уведомлений. Они работают идеально, когда приложение работает, и я получаю уведомления, когда приложение находится в фоновом режиме. Когда пользователь нажимает значок, он открывает приложение, но мое представление UICollection не перезагружается так, как когда пользователь получает уведомление при запуске приложения.PushNotifications iOS 7 не работает, когда пользователь нажимает на значок

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    UIApplicationState state = [application applicationState]; 
    if (state == UIApplicationStateActive) { 
     // do stuff when app is active 
     NSString *cancelTitle = @"Close"; 
     NSString *showTitle = @"Ok"; 
     NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; 
     NSString *type = [userInfo objectForKey:@"type"]; 

     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Linkedstar" 
                  message:message 
                  delegate:self 
                cancelButtonTitle:cancelTitle 
                otherButtonTitles:showTitle, nil]; 

     if([type isEqualToString:@"message"]) { 
      alertView.tag = alertMessage; 
     } 
     else if([type isEqualToString:@"post"]) { 
      alertView.tag = post; 
     } 
     else if([type isEqualToString:@"contact"]) { 
      alertView.tag = contact; 
     } 

     [alertView show]; 

     [self presentViewForPush:userInfo updateUI:YES]; 
    } 
    else 
    { 
     // do stuff when app is in background 
     NSLog(@"Received notification: %@", userInfo); 
     [self handlePush:userInfo updateUI:YES]; 
    } 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSDictionary *pushDict = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
    if(pushDict) 
    { 
     [self handlePush:pushDict updateUI:YES]; 
    } 
} 

Мне нужно помочь выяснить, как обрабатывать данные launchOptions, когда пользователь нажимает на icon.I попробовали несколько различных вариантов после выполнения некоторых исследований в Интернете и не работал. всякая помощь с благодарностью. Спасибо.

ответ

1

Вы читали это Scheduling, Registering, and Handling Notifications

Если кнопка действия касании (на устройстве под управлением IOS), система запускает приложение и приложение вызывает своего делегата приложения: didFinishLaunchingWithOptions: метод (если реализован); он передает в полезной нагрузке уведомления (для удаленных уведомлений) или объект локального уведомления (для локальных уведомлений).

Если значок приложения сливает на устройстве под управлением IOS, то приложения вызывает тот же метод, но не дает никакой информации о уведомлением

+0

О, ладно, тогда это имеет смысл. Это объясняет, что я испытываю. Это отстой, что действие не может быть вызвано, когда пользователь нажимает на значок после получения уведомления. – emm

+0

@emm Сначала вы должны сначала прочитать документы Apple, и это очень полезно.Вы можете принять этот ответ, если хотите, – onmyway133

+0

будет помнить об этом. спасибо за подсказку – emm

0

Обработка уведомлений выполняется либо в makeReceiveRemoteNotification (приложение «живое»), либо didFinishLaunchingWithOptions (приложение было «мертвым»).

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

+0

спасибо, я предположим, что мне просто нужно перезагрузить мой просмотр коллекции, когда они нажмут на них значок, чтобы обновить мои ячейки. – emm

3

1)Когда приложение является работающий в фоновом режиме и Когда приложение работает на переднем плане application:didReceiveRemoteNotification: метод будет вызываться как bel вл.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
if (application.applicationState == UIApplicationStateInactive) 
    { 
    //opened from a push notification when the app was on background 

     NSLog(@"userInfo->%@",[userInfo objectForKey:@"aps"]); 
    } 
    else if(application.applicationState == UIApplicationStateActive) 
    { 
    // a push notification when the app is running. So that you can display an alert and push in any view 

     NSLog(@"userInfo->%@",[userInfo objectForKey:@"aps"]); 
    } 
} 

2)Когда приложение не запускается (Закрыть) чем application:didFinishedLaunchWithOptions метод называется.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if (launchOptions != nil) 
    { 
     //opened from a push notification when the app is closed 
     NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
     if (userInfo != nil) 
     { 
      NSLog(@"userInfo->%@",[userInfo objectForKey:@"aps"]); 
     } 

    } 
    else{ 
      //opened app without a push notification. 
     } 
} 
+0

О, ох, спасибо за подсказку, я внесу соответствующие изменения в метод didReceiveRemoteNotification. – emm

0

У меня была та же проблема: если пользователь нажимает на нажимной баннером он получает информацию о толчке в приложении, если он нажимает на значок приложения он не получает его. Вы можете обрабатывать производные от него, но только с некоторыми ограничениями. Например, если вы хотите иметь номер жетона от толчка, вы можете сделать это: (Push -> значок App -> App значок значок -> ваш вар)

в AppDelegate

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    newMessages = application.applicationIconBadgeNumber; 
}