IOS. Предупреждение Push-уведомления не отображается, когда приложение запущено.

Я включил push-уведомления в своем приложении. Пользователи получат push-уведомление для присоединения к группе. Когда пользователь нажимает Присоединиться, я должен что-то обработать в коде. И поэтому я реализую:

- (void)application:(UIApplication *)application 
        didReceiveRemoteNotification:(NSDictionary *)userInfo

Это нормально работает, когда приложение не запущено.
Когда приложение работает, я не вижу UIAlertView. Как заставить приложение показать оповещение push-оповещения, чтобы пользователь мог решить, присоединиться или нет?

Ответ 1

Я использовал такой код в своем делефере приложения, чтобы имитировать уведомление, когда приложение было активным. Вы должны реализовать соответствующий метод протокола UIAlertViewDelegate, чтобы обрабатывать то, что происходит, когда пользователь нажимает одну из кнопок.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {    
  UIApplicationState state = [application applicationState];
  if (state == UIApplicationStateActive) {
      NSString *cancelTitle = @"Close";
      NSString *showTitle = @"Show";
      NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
      UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Some title"
       message:message 
       delegate:self 
       cancelButtonTitle:cancelTitle 
       otherButtonTitles:showTitle, nil];
      [alertView show];
      [alertView release];
  } else {
    //Do stuff that you would do if the application was not active
  }
}

Ответ 2

Для кого-то может быть интересно, я закончил создание пользовательского представления, которое выглядит как баннер системы, расположенный сверху, но добавляет кнопку закрытия (маленький синий X) и возможность использовать сообщение для пользовательских действий. Он также поддерживает случай более одного уведомления, полученного до того, как пользователь успел прочитать/отменить старые (без ограничений, сколько может накапливаться...)

Ссылка на GitHub: AGPushNote

Использование в основном включено:

[AGPushNoteView showWithNotificationMessage:@"John Doe sent you a message!"];

И это похоже на iOS7 (iOS6 имеет внешний вид iOS6...)

Example

Ответ 4

Для отображения вида предупреждения во время работы приложения вы должны использовать

-(void)application:(UIApplication *)application 
       didReceiveRemoteNotification:(NSDictionary *)userInfo {
}

и путем доступа к переменной userInfo

Ответ 5

будет вызываться только эта функция, и вы должны явно показать предупреждение в этом случае, если приложение не будет запущено, в котором вы выполняете уведомление. Нажмите там точку прерывания и обработайте вызов уведомления при вызове функции и покажите свое настроенное оповещение.

Ответ 6

Приложение все равно получит сообщение -application:didReceiveRemoteNotification в вашем делете делегата, но вам придется самому действовать на сообщение (т.е. предупреждение не отображается по умолчанию).

Параметр userInfo содержит объект с ключом notificationType, который вы можете использовать для идентификации push-сообщения.

Ответ 7

Вот версия, которая поддерживает UIAlertController

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
UIApplicationState state = [application applicationState];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
if (state == UIApplicationStateActive) {

    UIAlertController * alert=   [UIAlertController
                                  alertControllerWithTitle:notification.alertTitle
                                  message:notification.alertBody
                                  preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* ok = [UIAlertAction
                         actionWithTitle:@"OK"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                             [alert dismissViewControllerAnimated:YES completion:nil];

                         }];

    [alert addAction:ok];

    [self.navigationController presentViewController:alert animated:YES completion:nil];

}

}

** Обратите внимание, что мое приложение использует self.navigationController в App Delegate, просто подключайтесь к любому ViewController для представления (show) Alert **