Подтвердить что ты не робот

Как реализовать интерактивные уведомления ios8

Я создаю временное приложение списка todo, в котором пользователи могут запускать таймер из уведомления о блокировке, прокручивая, чтобы открыть кнопку запуска. Это новая функция, показанная в iOS 8, но есть небольшая документация, показывающая, как реализовать эту функцию. Может ли кто-нибудь показать, как я собираюсь настроить действие "start" и блок кода, который запускается при нажатии? Если приложение было закрыто, эта функция все еще работает?

4b9b3361

Ответ 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

2. Учебник Swift Code здесь

Ответ 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];