Я создаю временное приложение списка todo, в котором пользователи могут запускать таймер из уведомления о блокировке, прокручивая, чтобы открыть кнопку запуска. Это новая функция, показанная в iOS 8, но есть небольшая документация, показывающая, как реализовать эту функцию. Может ли кто-нибудь показать, как я собираюсь настроить действие "start" и блок кода, который запускается при нажатии? Если приложение было закрыто, эта функция все еще работает?
Как реализовать интерактивные уведомления ios8
Ответ 1
Чтобы узнать больше об интерактивных уведомлениях - новая функция в iOS 8 перейдет к следующей ссылке
https://developer.apple.com/videos/wwdc/2014/
а затем перейдите к разделу "Что нового в уведомлениях iOS"
Ответ 2
@Shubhendu спасибо за ссылку. Для тех из вас, кто не хочет сидеть в видео, кратко расскажите, что вам нужно сделать, чтобы включить интерактивные уведомления в ваше приложение.
-
Определите все действия, которые пользователь может выполнить из уведомлений о вашем приложении. Эти действия создаются с помощью класса UIMutableUserNotificationAction.
UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init]; action.identifier = @"ACTION_ID"; // The id passed when the user selects the action action.title = NSLocalizedString(@"Title",nil); // The title displayed for the action action.activationMode = UIUserNotificationActivationModeBackground; // Choose whether the application is launched in foreground when the action is clicked action.destructive = NO; // If YES, then the action is red action.authenticationRequired = NO; // Whether the user must authenticate to execute the action
-
Поместите эти действия в категории. Каждая категория определяет группу действий, которые пользователь может выполнить из уведомления. Эти категории создаются с помощью UIMutableUserNotificationCategory.
UIMutableUserNotificationCategory *category = [[UIMutableUserNotificationCategory alloc] init]; category.identifier = @"CATEGORY_ID"; // Identifier passed in the payload [category setActions:@[action] forContext:UIUserNotificationActionContextDefault]; // The context determines the number of actions presented (see documentation)
-
Зарегистрируйте категории в настройках. Обратите внимание, что регистрация категорий не заменяет запрос на разрешение пользователя отправлять удаленные уведомления, используя
[[UIApplication sharedApplication] registerForRemoteNotifications]
NSSet *categories = [NSSet setWithObjects:category, nil]; NSUInteger types = UIUserNotificationTypeNone; // Add badge, sound, or alerts here UIUserNotificationSettings *settings = [UIUSerNotificationSettings settingsForTypes:types categories:categories]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
-
Отправьте идентификатор категории в полезную нагрузку уведомления.
{ "aps":{ "alert":"Here a notification", ... "category":"CATEGORY_ID" } }
-
Управлять действиями пользователя в делегате приложения путем реализации методов протокола UIApplicationDelegate:
application:handleActionWithIdentifier:forRemoteNotification:completionHandler:
для удаленных уведомленийapplication:handleActionWithIdentifier:forLocalNotification:completionHandler:
для локальных уведомлений
Ответ 3
ШАГ 1:
NSString * const NotificationCategoryIdent = @"ACTIONABLE";
NSString * const NotificationActionOneIdent = @"ACTION_ONE";
NSString * const NotificationActionTwoIdent = @"ACTION_TWO";
- (void)registerForNotification {
UIMutableUserNotificationAction *action1;
action1 = [[UIMutableUserNotificationAction alloc] init];
[action1 setActivationMode:UIUserNotificationActivationModeBackground];
[action1 setTitle:@"Action 1"];
[action1 setIdentifier:NotificationActionOneIdent];
[action1 setDestructive:NO];
[action1 setAuthenticationRequired:NO];
UIMutableUserNotificationAction *action2;
action2 = [[UIMutableUserNotificationAction alloc] init];
[action2 setActivationMode:UIUserNotificationActivationModeBackground];
[action2 setTitle:@"Action 2"];
[action2 setIdentifier:NotificationActionTwoIdent];
[action2 setDestructive:NO];
[action2 setAuthenticationRequired:NO];
UIMutableUserNotificationCategory *actionCategory;
actionCategory = [[UIMutableUserNotificationCategory alloc] init];
[actionCategory setIdentifier:NotificationCategoryIdent];
[actionCategory setActions:@[action1, action2]
forContext:UIUserNotificationActionContextDefault];
NSSet *categories = [NSSet setWithObject:actionCategory];
UIUserNotificationType types = (UIUserNotificationTypeAlert|
UIUserNotificationTypeSound|
UIUserNotificationTypeBadge);
UIUserNotificationSettings *settings;
settings = [UIUserNotificationSettings settingsForTypes:types
categories:categories];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}
ШАГ 2: Чтобы отправить этот тип уведомления, просто добавьте категорию в полезную нагрузку.
{
"aps" : {
"alert" : "Pull down to interact.",
"category" : "ACTIONABLE"
}
}
ШАГ 3: Используйте этот метод
application:handleActionWithIdentifier:forRemoteNotification:completionHand
ler:
[application:handleActionWithIdentifier:forLocalNotification:completionHandler:
-> For LOCAL Notification]
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler {
if ([identifier isEqualToString:NotificationActionOneIdent]) {
NSLog(@"You chose action 1.");
}
else if ([identifier isEqualToString:NotificationActionTwoIdent]) {
NSLog(@"You chose action 2.");
}
if (completionHandler) {
completionHandler();
}
}
Ссылка 1.Refer: Учебник Obj C
Ответ 4
С iOS 8 появился новый новый API для создания интерактивных уведомлений. Это позволяет вам предоставлять дополнительные функции своим пользователям за пределами вашего приложения.
Давайте начнем. В iOS 8 есть 3 новых класса: UIUserNotificationSettings, UIUserNotificationCategory, UIUserNotificationAction
и их изменяемые копии.
Вместо простой регистрации для типов уведомлений (звуков, баннеров, предупреждений) вы также можете зарегистрироваться для пользовательских категорий и действий уведомлений. Категории описывают нестандартный тип уведомления, отправляемого вашим приложением, и содержит действия, которые пользователь может выполнить в ответ. Например, вы получаете уведомление о том, что кто-то следил за вами в социальной сети. В ответ вы можете захотеть последовать за ними или проигнорировать.
NSString * const NotificationCategoryIdent = @"ACTIONABLE";
NSString * const NotificationActionOneIdent = @"ACTION_ONE";
NSString * const NotificationActionTwoIdent = @"ACTION_TWO";
- (void)registerForNotification {
UIMutableUserNotificationAction *action1;
action1 = [[UIMutableUserNotificationAction alloc] init];
[action1 setActivationMode:UIUserNotificationActivationModeBackground];
[action1 setTitle:@"Action 1"];
[action1 setIdentifier:NotificationActionOneIdent];
[action1 setDestructive:NO];
[action1 setAuthenticationRequired:NO];
UIMutableUserNotificationAction *action2;
action2 = [[UIMutableUserNotificationAction alloc] init];
[action2 setActivationMode:UIUserNotificationActivationModeBackground];
[action2 setTitle:@"Action 2"];
[action2 setIdentifier:NotificationActionTwoIdent];
[action2 setDestructive:NO];
[action2 setAuthenticationRequired:NO];
UIMutableUserNotificationCategory *actionCategory;
actionCategory = [[UIMutableUserNotificationCategory alloc] init];
[actionCategory setIdentifier:NotificationCategoryIdent];
[actionCategory setActions:@[action1, action2]
forContext:UIUserNotificationActionContextDefault];
NSSet *categories = [NSSet setWithObject:actionCategory];
UIUserNotificationType types = (UIUserNotificationTypeAlert|
UIUserNotificationTypeSound|
UIUserNotificationTypeBadge);
UIUserNotificationSettings *settings;
settings = [UIUserNotificationSettings settingsForTypes:types
categories:categories];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}
//Полезная нагрузка JSON:
{
"aps" : {
"alert" : "Pull down to interact.",
"category" : "ACTIONABLE"
}
}
Теперь, чтобы обрабатывать действия, которые пользователь выбирает, в протоколе UIApplicationDelegate
есть два новых метода:\
application:handleActionWithIdentifier:forLocalNotification:completionHandler:
application:handleActionWithIdentifier:forRemoteNotification:completionHandler:
Эти методы будут вызваны в фоновом режиме, когда пользователь выберет действие из вашего push-уведомления.
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler {
if ([identifier isEqualToString:NotificationActionOneIdent]) {
NSLog(@"You chose action 1.");
}
else if ([identifier isEqualToString:NotificationActionTwoIdent]) {
NSLog(@"You chose action 2.");
}
if (completionHandler) {
completionHandler();
}
}
Ответ 5
Для ios10 Actionable push используйте этот
UNAuthorizationOptions authOptions =
UNAuthorizationOptionAlert
| UNAuthorizationOptionSound
| UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
requestAuthorizationWithOptions:authOptions
completionHandler:^(BOOL granted, NSError * _Nullable error) {
}
];
UNNotificationAction *ok = [UNNotificationAction actionWithIdentifier:@"OK"
title:NSLocalizedString(@"OK", nil)
options:UNNotificationActionOptionForeground];
UNNotificationAction *cancel = [UNNotificationAction actionWithIdentifier:@"CANCEL"
title:NSLocalizedString(@"CANCEL", nil)
options:UNNotificationActionOptionForeground];
NSArray *buttons = @[ ok, cancel ];
// create a category for message failed
UNNotificationCategory *buttonsAction = [UNNotificationCategory categoryWithIdentifier:@"ACTION_BUTTON"
actions:buttons
intentIdentifiers:@[]
options:UNNotificationCategoryOptionCustomDismissAction];
NSSet *categories = [NSSet setWithObjects:buttonsAction, nil];
// registration
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:categories];