iOS - оповещение о push-уведомлениях не отображается при запуске приложения - PullRequest
34 голосов
/ 01 ноября 2011

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

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

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

Ответы [ 7 ]

70 голосов
/ 01 ноября 2011

Я использовал такой код в делегате приложения, чтобы имитировать уведомление об уведомлении, когда приложение было активным. Вы должны реализовать соответствующий метод (ы) протокола 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
  }
}
17 голосов
/ 29 апреля 2014

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

Ссылка на GitHub: AGPushNote

Использование в основном on-liner:

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

И это выглядит на iOS7 (iOS6 выглядит и чувствуется на iOS6 ...)

Example

1 голос
/ 01 ноября 2011

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

1 голос
/ 01 ноября 2011

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

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

и получить доступ к переменной userInfo

1 голос
/ 01 ноября 2011

Вы должны показать предупреждение самостоятельно, если хотите. Это намеренное поведение, как описано здесь http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html ниже Листинга 2-6

0 голосов
/ 08 марта 2016

Вот версия, которая поддерживает 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, чтобы представить (показать) Alert **

0 голосов
/ 01 ноября 2011

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

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

...