iOS_远程推送(iOS10)_UNNotificationContentExtension

来源:互联网 发布:钱龙软件怎么样 编辑:程序博客网 时间:2024/06/05 17:41

UNNotificationContentExtension简介

  • UNNotificationContentExtension这个类,也是iOS10推送的新特性,官方文档用这么一句话,简单的解释了一下,Presents a custom interface for a delivered local or remote notification.(当你收到远程或者本地通知的时候,弹出一个自定义界面)
  • 界面可以分为三大部分
    1. 顶部:App名称;
    2. 中部:上中下三个视图和一个自定义的View视图
    3. 底部:原本的推送标题、推送内容等

如何新建一个UNNotificationContentExtension

创建target

File->New->Target…

这里写图片描述

选择NotificationContentExtension按钮,然后进行程序的命名

这里写图片描述

最终会生成下图所示文件夹

这里写图片描述
- 看过UNNotificationServiceExtension的可以发现,两者的创建流程基本一致,无非生成的文件不同。

如何使用UNNotificationContentExtension

  • 下面介绍一下生成的四个文件

NotificationViewController文件

  • 看名字就知道这是一个继承UIViewController的控制器文件。
  • 在此文件内有两个方法:
    1. 对于- (void)viewDidLoad;就不多说了,基本都会用。
    2. 对于- (void)didReceiveNotification:(UNNotification *)notification;这个方法,内部有一行代码self.label.text = notification.request.content.body;从这行代码中我们可以看出,这是接收到通知时,进行的回调方法,在这个方法内,我们对页面效果进行修改和展示。
    3. 使用示例如下:
- (void)didReceiveNotification:(UNNotification *)notification {    // 这个方法,可以给自己的控件赋值啊,调整frame啊等等,我在这里打印出来了通知的内容,供大家使用。    NSDictionary *dict =  notification.request.content.userInfo;    // 这里可以把打印的所有东西拿出来    NSLog(@"%@",dict);    /****************************打印的信息是************    aps =     {        alert = "This is some fancy message.";        badge = 1;        from = "hello word";        imageAbsoluteString = "http://upload.univs.cn/2012/0104/1325645511371.jpg";        "mutable-content" = 1;        sound = default;    };}    *******************************************/}

简单介绍其遵守的协议<UNNotificationContentExtension>

  • <UNNotificationContentExtension>中,存在下面这个方法,这个方法的用法与UNNotificationServiceExtension中的一样。
- (void)didReceiveNotificationResponse:(UNNotificationResponse *)response completionHandler:(void (^)(UNNotificationContentExtensionResponseOption option))completion;
  • <UNNotificationContentExtension>中,有着这么一个枚举
typedef NS_ENUM(NSUInteger, UNNotificationContentExtensionMediaPlayPauseButtonType) {      // 没有播放按钮    UNNotificationContentExtensionMediaPlayPauseButtonTypeNone,    // 有播放按钮,点击播放之后,按钮依旧存在,类似音乐播放的开关    UNNotificationContentExtensionMediaPlayPauseButtonTypeDefault,    // 有播放按钮,点击后,播放按钮消失,再次点击暂停播放后,按钮恢复    UNNotificationContentExtensionMediaPlayPauseButtonTypeOverlay,}
  • <UNNotificationContentExtension>中,有以下几个属性
// 设置播放按钮的属性@property (nonatomic, readonly, assign) UNNotificationContentExtensionMediaPlayPauseButtonType mediaPlayPauseButtonType;// 设置播放按钮的frame@property (nonatomic, readonly, assign) CGRect mediaPlayPauseButtonFrame;// 设置播放按钮的颜色@property (nonatomic, readonly, copy) UIColor *mediaPlayPauseButtonTintColor;// 开始跟暂停播放- (void)mediaPlay;- (void)mediaPause;
  • 在这个协议内也有以下内容:
// 这两个方法只是会被单纯的调用,不会被监听到,因此,也不会在这两个方法内回调。@interface NSExtensionContext (UNNotificationContentExtension)// 控制播放- (void)mediaPlayingStarted  // 控制暂停- (void)mediaPlayingPaused @end
  • 由于这些属性都是只读的,因此我们只能调用他们的get方法,来设置buttton的样式、大小、颜色

MainInterface.storyboard文件

  • 这就是个storyboard文件,系统在创建时就与NotificationViewController进行了绑定,便于开发者进行可视化编程,布局页面效果。

Info.plist文件

这里写图片描述

  • 从上面的截图,可以看出,主要有三个字段NSExtensionAttributes、NSExtensionMainStoryboard、NSExtensionPointIdentifier。

NSExtensionAttributes

  • 在这个字段内有UNNotificationExtensionCategory、UNNotificationExtensionInitialContentSizeRatio这两个字段。

UNNotificationExtensionCategory

  • 系统生成的是一个字符串类型的Value值,我们可以将其修改成数组类型,然后在内添加元素,示例如下图所示:
    这里写图片描述
  • 这里面的两个值是我随便写的,可以与后台商量,确定字段的值。
  • 在收到通知的时候,我们可以让后台把这个通知的categoryIdentifier带上,作用是,我们可以根据视频,音乐,图片,来分别自定义我们的通知内容。不同的分类标识符,也会在我们讲到UNNotificationAction的时候,帮助我们区分是什么类型的通知,方便我们对不同类型的通知做出不同的操作行为。
- (void)didReceiveNotification:(UNNotification *)notification {// 不同的分类标识符    NSString *categoryId = notification.request.content.categoryIdentifier;}

UNNotificationExtensionInitialContentSizeRatio

  • 这个值的类型是一个浮点类型,代表的是高度与宽度的比值。系统会使用这个比值,作为初始化view的大小。举个简单的例子来说,如果该值为1,则该视图为正方形。如果为0.5,则代表高度是宽度的一半。

NSExtensionMainStoryboard

  • 系统默认生成的,用于绑定Storyboard和ViewController,可以进行修改,只要不嫌自己重新建一个麻烦。

NSExtensionPointIdentifier

  • 系统默认生成的,直接可以用,不用修改。

代码地址:
https://github.com/FlyingKuiKui/PushTestApp.git

原创粉丝点击