大伙久等啦~这绝对是最全最详细的 UNNotificationContentExtension讲解哟~
这篇文章中,我会给大家补充完推送内容的后续部分,希望大家看完这篇文章后,便可以轻松的玩转推送了。
1、UNNotificationContentExtension
1.1、UNNotificationContentExtension简介
简单来说,UNNotificationContentExtension这个类,也是iOS10推送的新特性,官方文档用这么一句话,简单的解释了一下,Presents a custom interface for a delivered local or remote notification.(当你收到远程或者本地通知的时候,弹出一个自定义界面)。效果如下图所示
还有下图
上面的两张图就是我们将要做出的效果,在自定义View的区域,你可以放上个视频,放上个日历,放上个显示地理位置的Label,总而言之,我们可以自定义View!
1.2、如何新建一个UNNotificationContentExtension
创建这个UNNotificationContentExtension的Target,类似于创建UNNotificationServiceExtension的步骤。
第一步:创建
之后便可以看到生成了这些内容
1.3、如何使用以及相关Demo
说到如何使用这个类,我们就一定要先说一下,系统帮我们生成的这几个文件分别代表了什么意思。
>0.Info.plist
在这个NSExtensionAttributes的字典下面,我们有三个属性可以添加
一.UNNotificationExtensionCategory.
(必须要有,系统已经创建好)
解释:对应这个key的值,可以是一个字符串,也可以是一个数组,每一个字符串都是一个identifier,这个identifier对应着每一个UNMutableNotificationContent的categoryIdentifier的属性。
简单来说,就是在收到通知的时候,我们可以让服务器把这个通知的categoryIdentifier带上,作用是,我们可以根据视频,音乐,图片,来分别自定义我们的通知内容。不同的分类标识符,也会在我们讲到UNNotificationAction的时候,帮助我们区分是什么类型的通知,方便我们对不同类型的通知做出不同的操作行为。上面的截图中,我是一个字符串的形式。下图为数组形式:
使用的时候,我们参照如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// 1.这个方法是UNNotificationServiceExtension类里面的方法,可以参照我上一篇文章讲的UNNotificationServiceExtension,我要在这里重写我的通知。 - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { self.contentHandler = contentHandler; // copy发来的通知,开始做一些处理 self.bestAttemptContent = [request.content mutableCopy]; // Modify the notification content here... self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title]; // 重写一些东西 self.bestAttemptContent.title = @"我是标题"; self.bestAttemptContent.subtitle = @"我是子标题"; self.bestAttemptContent.body = @"来自徐不同"; // 附件 NSDictionary *dict = self.bestAttemptContent.userInfo; NSDictionary *notiDict = dict[@"aps"]; NSString *imgUrl = [NSString stringWithFormat:@"%@",notiDict[@"imageAbsoluteString"]]; !!!!! 这里是重点!!!!!!!!!!!! // 我在这里写死了category1,其实在收到系统推送时,每一个推送内容最好带上一个catagory,跟服务器约定好了,这样方便我们根据categoryIdentifier来自定义不同类型的视图,以及action self.bestAttemptContent.categoryIdentifier = @"category1"; } |
大家注意上面的
1 2 3 |
!!!!! 这里是重点!!!!!!!!!!!! // 我在这里写死了category1,其实在收到系统推送时,每一个推送内容最好带上一个catagory,跟服务器约定好了,这样方便我们根据categoryIdentifier来自定义不同类型的视图,以及action self.bestAttemptContent.categoryIdentifier = @"category1"; |
这里设置categoryIdentifier,最好让服务器的推送内容带上这个,然后我们好更加的定制化。不建议本地写死。
具体可以参考我的demo地址
二.UNNotificationExtensionInitialContentSizeRatio.
(必须要有,系统已经创建好)
解释:这个值的类型是一个浮点类型,代表的是高度与宽度的比值。系统会使用这个比值,作为初始化view的大小。举个简单的例子来说,如果该值为1,则该视图为正方形。如果为0.5,则代表高度是宽度的一半。
注意这个值只是初始化的一个值,在这个扩展添加后,可以重写frame,展示的时候,在我们还没打开这个视图预览时,背景是个类似图片占位的灰色,那个灰色的高度宽度之比,就是通过这个值来设定。
三.UNNotificationExtensionDefaultContentHidden.
(可选)
解释:这个值是一个BOOL值,当为YES时,会隐藏上方原本推送的内容视图,只会显示我们自定义的视图。(因为在自定义视图的时候,我们可以取得推送内容,然后按照我们想要的布局,展示出来)如果为NO时(默认为NO),推送视图就会既有我们的自定义视图,也会有系统原本的推送内容视图(这里附件是不会显示的,只会显示body里面的文字哟)
四.至于NSExtensionMainStoryboard以及NSExtensionPointIdentifier,系统默认生成,大家直接用就好,如果需要更改的,只能更改使用的storyboard的名字(不过应该没人会把系统的删除在建立一个吧 O(∩_∩)O)
>1.MainInterface.storyboard
这个就是个简单的storyboard文件,内部有一个View,这个View就是在上面的图层中的自定义View视图了。它与NotificationViewController所绑定。
>2.NotificationViewController
这是是系统帮我们默认创建了一个控制器,继承UIViewController,其实就是一个控制器啦。
说道这个控制器我们需要讲解一个方法:
- 遵守UNNotificationContentExtension的协议,我们需要用到一下的方法
1 2 |
// 这个方法是说,只要你收到通知,并且保证categoryIdentifier的设置,跟info.plist里面设置的一样,你就会调用这个方法。注意:一个会话的多个通知,每个通知收到时,都可以调用这个方法。 - (void)didReceiveNotification:(UNNotification *)notification; |
使用如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
- (void)didReceiveNotification:(UNNotification *)notification { 这个方法,可以给自己的控件赋值啊,调整frame啊等等,我在这里打印出来了通知的内容,供大家使用。 NSDictionary *dict = notification.request.content.userInfo; // 这里可以把打印的所有东西拿出来 NSLog(@"%@",dict); /****************************打印的信息是************ aps = { alert = "This is some fancy message."; badge = 1; from = "大家好,我是徐不同"; imageAbsoluteString = "http://upload.univs.cn/2012/0104/1325645511371.jpg"; "mutable-content"cationContentExtension
1.1、UNNotificationContentExtension简介简单来说,UNNotificationContentExtension这个类,也是iOS10推送的新特性,官方文档用这么一句话,简单的解释了一下,Presents a custom interface for a delivered local or remote notification.(当你收到远程或者本地通知的时候,弹出一个自定义界面)。效果如下图所示 还有下图 上面的两张图就是我们将要做出的效果,在自定义View的区域,你可以放上个视频,放上个日历,放上个显示地理位置的Label,总而言之,我们可以自定义View! 1.2、如何新建一个UNNotificationContentExtension创建这个UNNotificationContentExtension的Target,类似于创建UNNotificationServiceExtension的步骤。 之后便可以看到生成了这些内容 1.3、如何使用以及相关Demo说到如何使用这个类,我们就一定要先说一下,系统帮我们生成的这几个文件分别代表了什么意思。 >0.Info.plist在这个NSExtensionAttributes的字典下面,我们有三个属性可以添加 简单来说,就是在收到通知的时候,我们可以让服务器把这个通知的categoryIdentifier带上,作用是,我们可以根据视频,音乐,图片,来分别自定义我们的通知内容。不同的分类标识符,也会在我们讲到UNNotificationAction的时候,帮助我们区分是什么类型的通知,方便我们对不同类型的通知做出不同的操作行为。上面的截图中,我是一个字符串的形式。下图为数组形式: 使用的时候,我们参照如下代码:
大家注意上面的
这里设置categoryIdentifier,最好让服务器的推送内容带上这个,然后我们好更加的定制化。不建议本地写死。 二.UNNotificationExtensionInitialContentSizeRatio. 注意这个值只是初始化的一个值,在这个扩展添加后,可以重写frame,展示的时候,在我们还没打开这个视图预览时,背景是个类似图片占位的灰色,那个灰色的高度宽度之比,就是通过这个值来设定。 三.UNNotificationExtensionDefaultContentHidden. 四.至于NSExtensionMainStoryboard以及NSExtensionPointIdentifier,系统默认生成,大家直接用就好,如果需要更改的,只能更改使用的storyboard的名字(不过应该没人会把系统的删除在建立一个吧 O(∩_∩)O) >1.MainInterface.storyboard这个就是个简单的storyboard文件,内部有一个View,这个View就是在上面的图层中的自定义View视图了。它与NotificationViewController所绑定。 >2.NotificationViewController这是是系统帮我们默认创建了一个控制器,继承UIViewController,其实就是一个控制器啦。
使用如下:
|