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) и возможность использовать сообщение для пользовательских действий. Он также поддерживает случай более одного уведомления, полученного до того, как пользователь успел прочитать/отменить старые (без ограничений, сколько может накапливаться...)
Использование в основном включено:
[AGPushNoteView showWithNotificationMessage:@"John Doe sent you a message!"];
И это похоже на iOS7 (iOS6 имеет внешний вид iOS6...)
![Example]()
Ответ 3
Вы должны показать оповещение самостоятельно, если хотите. Это преднамеренное поведение, описанное здесь http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html ниже Листинг 2-6
Ответ 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 **