• iOS8新特性之交互式通知


    目前分为四个推送:用户推送,本地推送,远程推送,地理位置推送。

    1. if (IS_IOS8) {  
    2.         //1.创建消息上面要添加的动作(按钮的形式显示出来)  
    3.         UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];  
    4.         action.identifier = @"action";//按钮的标示  
    5.         action.title=@"Accept";//按钮的标题  
    6.         action.activationMode = UIUserNotificationActivationModeForeground;//当点击的时候启动程序  
    7.         //    action.authenticationRequired = YES;  
    8.         //    action.destructive = YES;  
    9.           
    10.         UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];  
    11.         action2.identifier = @"action2";  
    12.         action2.title=@"Reject";  
    13.         action2.activationMode = UIUserNotificationActivationModeBackground;//当点击的时候不启动程序,在后台处理  
    14.         action.authenticationRequired = YES;//需要解锁才能处理,如果action.activationMode = UIUserNotificationActivationModeForeground;则这个属性被忽略;  
    15.         action.destructive = YES;  
    16.           
    17.         //2.创建动作(按钮)的类别集合  
    18.         UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];  
    19.         categorys.identifier = @"alert";//这组动作的唯一标示,推送通知的时候也是根据这个来区分  
    20.         [categorys setActions:@[action,action2] forContext:(UIUserNotificationActionContextMinimal)];  
    21.           
    22.         //3.创建UIUserNotificationSettings,并设置消息的显示类类型  
    23.         UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:[NSSet setWithObjects:categorys, nil nil]];  
    24.         [application registerUserNotificationSettings:notiSettings];  
    25.           
    26.     }else{  
    27.         [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];  
    28.     }  

     

     

     

     

     

     

    一、通过调用 [[UIApplicationsharedApplication]registerForRemoteNotifications];来实现

    application:didRegisterForRemoteNotificationsWithDeviceToken:application:didFailToRegisterForRemoteNotificationsWithError:的回调

     

    二、设置 UIUserNotificationActionUIMutableUserNotificationCategory

    UIUserNotificationAction的设置:

     

    UIMutableUserNotificationAction *cancelAction = [[UIMutableUserNotificationAction alloc] init];

    [cancelAction setIdentifier:@"CancelNotificationActionIdentifier"];

    [cancelAction setTitle:@"Cancel"];

    [cancelAction setActivationMode:UIUserNotificationActivationModeBackground];

    [cancelAction setAuthenticationRequired:YES];

    [cancelAction setDestructive:YES];

     

     

    identifier

    User notificaton aciton的唯一标示

    title

    User notificaton aciton button的显示标题

     

    activationMode

     

    UIUserNotificationActivationModeForeground 激活App并打开到前台展示

     

    UIUserNotificationActivationModeBackground 在后台激活App,测试时发现如果没有启动App(App不在后台也没有打开),那么执行这种模式下的操作,App不会打开;如果App已经在前台了,那么执行这种模式下的操作,App依然在前台。

     

    authenticationRequired

    如果设置为YES,执行这个操作的时候必须解锁设备,反之,无需解锁。

    如果activationMode为UIUserNotificationActivationModeForeground时,authenticationRequired被作为YES处理。

    测试时发现,如果用户设备有密码,在锁屏时authenticationRequired设置为YES执行操作时需要用户输入密码,如果设置为NO则不需要用户输入密码,如果用户设备没有密码,那么无论如何设置都不需要输入密码。

     

    destructive

    标示操作按钮是否为红色,只有在锁屏和从通知中心向左滑动出现时才有这种突出显示,在顶部消息展示时没有这种突出效果。

     

    UIMutableUserNotificationCategory的设置:

    UIMutableUserNotificationCategory *notificationCategory = [[UIMutableUserNotificationCategory alloc] init];

    [notificationCategory setIdentifier:@"NotificationCategoryIdentifier"];

    [notificationCategory setActions:@[acceptAction, cancelAction]

                          forContext:UIUserNotificationActionContextDefault];

     

    identifier

    category的唯一标示,identifier的值与payload(从服务器推送到客户端的内容)中category值必须一致。

    actions

    UIUserNotificationAction 数组,如果设置为nil,那么将不会显示操作按钮。

     

    context

    UIUserNotificationActionContextDefault 通知操作的默认Context,在这种情况下,你可以指定4个自定义操作。(还未验证)

     

    UIUserNotificationActionContextMinimal 通知操作的最小Context,在这种情况下,你可以指定2个自定义操作。(还未验证)

     

     

    三、设置 UIUserNotificationSettings

     

    UIUserNotificationType notificationTypes = (UIUserNotificationTypeAlert|

                                                UIUserNotificationTypeSound|

                                                UIUserNotificationTypeBadge);

    NSSet *categoriesSet = [NSSet setWithObject:notificationCategory];

    UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:notificationTypes

                                                                                         categories:categoriesSet];

    设置通知所支持的类型和Category,这里没有难点,不过多解释。

     

    四、注册通知 registerUserNotificationSettings

    [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];

     

     

    在iOS8中通过以上方式注册通知,可以根据操作系统版本做区分处理

     

    五、处理回调事件

     

    - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler

    {

        if([identifier isEqualToString:@"CancelNotificationActionIdentifier"])

        {

            NSLog(@"You chose cancel action.");

        }

        else if ([identifier isEqualToString:@"AcceptNotificationActionIdentifier"])

        {

            NSLog(@"You chose accept action.");

        }

        

        if(completionHandler)

        {

            completionHandler();

        }

    }

     

    application

    收到通知的对象

     

    identifier

    UIUserNotificationAction的唯一标示

     

    userInfo

    payload的内容

    completionHandler

    当执行完指定的操作后,必须在最后调用这个方法

     

    我测试用的paload是

     

    {

        aps =     {

            alert = "Thank you very much";

            badge = 1;

            category = NotificationCategoryIdentifier;

            sound = "ping.caf";

        };

    }

  • 相关阅读:
    IBM_V7000底层结构及服务器数据恢复案例详解
    vsan存储结构详解 数据恢复原理介绍
    基于linux系统,fsck后数据丢失的数据恢复方案
    SQL SERVER数据页checksum校验算法整理
    虚拟机丢失恢复数据过程;分析底层数据恢复存储数据
    15、【opencv入门】分离颜色通道&多通道图像混合
    14、【opencv入门】图像阈值化threshold
    13、【opencv入门】非线性滤波:中值滤波、双边滤波
    12、【opencv入门】线性滤波:方框滤波、均值滤波与高斯滤波
    11、【opencv入门】ROI区域 mask掩码 图像叠加&初级图像混合
  • 原文地址:https://www.cnblogs.com/pocket-mood/p/4504034.html
Copyright © 2020-2023  润新知