- PVSM.RU - https://www.pvsm.ru -
Одним из нововведений iOS 8 являются интерактивные нотификации. Таким нотификациям можно назначить до четырех действий, каждое из которых будет представлено отдельной кнопкой внизу баннера с текстом нотификации. Таким образом, у пользователя появляются дополнительные возможности отреагировать на сообщения без активации (обычно) приложения. Рассмотрим, как добавить поддержку подобного функционала.
Во-первых, необходимо определить действия, которые можно выполнять над нотификацией. Делается это с помощью экземпляров класса UIMutableUserNotificationAction [1]:
UIMutableUserNotificationAction *action_like = [[UIMutableUserNotificationAction alloc] init];
action_like.identifier = @"Like";
action_like.title = NSLocalizedString(@"Like",nil);
action_like.activationMode = UIUserNotificationActivationModeBackground;
action_like.destructive = NO;
action_like.authenticationRequired = NO;
Экземпляры данного класса содержат свойства:
identifier — строка-идентификатор действия. Это свойство будет использоваться в дальнейшем, чтобы отличать действия друг от друга.
title — заголовок, который будет показан на кнопке.
activationMode — определяет, можно ли обрабатывать действие в бэкграунде или же приложение необходимо активировать.
destructive — определяет, является ли действие деструктивным. Если да, кнопка такого действия будет выделена (обычно красным цветом).
authenticationRequired — определяет, необходима ли аутентификация пользователя для выполнения действия.
Пример определения деструктивного действия, для выполнения которого приложение будет активироваться:
UIMutableUserNotificationAction *action_del = [[UIMutableUserNotificationAction alloc] init];
action_del.identifier = @"Delete";
action_del.title = NSLocalizedString(@"Delete",nil);
action_del.activationMode = UIUserNotificationActivationModeForeground;
action_del.destructive = YES;
action_del.authenticationRequired = NO;
Во-вторых, мы должны создать категорию для наших нотификаций с помощью экземпляра класса UIMutableUserNotificationCategory [2]:
UIMutableUserNotificationCategory *category= [[UIMutableUserNotificationCategory alloc] init];
category.identifier = @"my_category";
[category setActions:@[action_like, action_del] forContext:UIUserNotificationActionContextDefault];
NSSet *categories = [NSSet setWithObjects:category, nil];
Идентификатор категории следует отправлять в качестве ключа category в pyaload'е push-нотификации или свойства category локальной нотификации.
Аргумент forContext задает количество допустимых действий для нотификации.
Регистрация:
UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:categories];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
Отправив нотификацию следующего вида:
{'aps':
{'alert': 'A sample of interactive notification text',
'category': 'my_category',
'some_id': 'my_id'
}
}
(c учетом ограничений на размер payload'a категорию нотификации имеет смысл задавать не очень длинным идентификатором; но так как это учебный пример, то используется my_category), получим уведомления следующего вида.
На lock- screen'е:
и после сдвига:
В области уведомлений:
И Notification center:
Для обработки нажатий на кнопки следует определить метод
- application:handleActionWithIdentifier:forLocalNotification:completionHandler:
для обработки локальных уведомлений.
И
- application:handleActionWithIdentifier:forRemoteNotification:completionHandler:
для обработки push-уведомлений.
Второй аргумент этих методов — это идентификатор действия, который мы ранее указывали как:
action_del.identifier = @"Delete";
Последний аргумент — это блок, который необходимо обязательно вызвать после обработки действия:
- (void) application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler {
NSLog(@"NOTIFICATION IDENT: %@ USER INFO: %@", identifier, userInfo);
completionHandler();
}
Обратите внимание, что нажатие на кнопку 'Like' не активирует приложение. В отличие от нажатия на 'Delete'.
Таким образом, «легким движением руки» (с) можно добавить дополнительный функционал в приложение, увеличив его привлекательность для пользователя (во всяком случае, попытаться увеличить привлекательность).
Автор: XVadim
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ios/71655
Ссылки в тексте:
[1] UIMutableUserNotificationAction: https://developer.apple.com/library/ios/documentation/UIKit/reference/UIMutableUserNotificationAction_class/index.html
[2] UIMutableUserNotificationCategory : https://developer.apple.com/library/ios/documentation/UIKit/reference/UIMutableUserNotificationCategory_class/index.html
[3] Источник: http://habrahabr.ru/post/240367/
Нажмите здесь для печати.