iOS 10 新特性之通知推送(A)--干货一篇

iOS10 新特性一出,各家纷纷出动研究新特性能给场景智能化所带来的好处,从widget到推送通知的拓展。不意外的,当我还没有来得及跟公司沟通新特性在软件上的应用时,就被公司拉来研究了,今天我先就iOS 10 在推送通知上的新增API以及使用方法说一说:

(不避讳的说,程序媛一枚,欢迎点赞)

iOS10 的推送通知支持图片啦!!支持视频了!!支持自定义样式了!!

首先认识一个类:UNNotificationSettings (枚举,通知支持的样式:声音,弹框,横幅,等等)

第一步注册通知:

//引入头文件
#import <UserNotifications/UserNotifications.h>

//注册推送通知,iOS10之后不论是否本地通知与远程推送通知,都将采用注册,以及请求发送的形式
UNUserNotificationCenter *notificationCenter = [UNUserNotificationCenter currentNotificationCenter];

notificationCenter.delegate = self;

[notificationCenter requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {

NSLog(@"%d--%@", granted, error);

}];; //option参数设置支持通知的样式,声音,横幅,弹框,等

磨刀不误砍材工,再来认识几个类:

trigger

设置通知的触发时机:
UNCalenderNotificaitionTrigger(设置某时固定触发通知)
UNLocationNotificaitionTrigger (设置当进入某一区域触发通知)
UNTimeIntervalNotificaitionTrigger (设置多久后触发通知)

content

UNNoticificationContent (一个设置通知组件的类,title,message,categoryIdentifier,媒体图片,视频,等都装在这个结构体中发出通知请求,它还有一个和它一对的类UNMutableNoticificationContent)

UNNotificationAction (添加交互事件,包括输入文字,点击按钮)

UNNotificationAttachment (媒体相关,想要推送带“图片”和”视频“的通知,但是只支持本地的图片和视频,想要获取数据只能下载到本地再推送哦。
PS:我踩过一个坑,你以为要自己清除下载到本地的缓存?想多啦,即使是存储在Document,发送完通知之后苹果会找到这条路径自动清空缓存,做demo的时候发现自己存在那个路径的图片都在发送通知后的一瞬间被清空了,也就是说,想再利用这张图,要再下载哦,或者把这张图本地持久化,我是把图转成data存在NSUserDefaults了,个人觉得有点麻烦,有更好方法的大神给我留言哦~~!!)

第二步:初始化通知组件

//1.初始化通知
UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
content.badge = @1;
content.title = self.titleTF.text;
content.body = self.messageTextView.text;  //如果没有body则不会弹出通知
UNNotificationSound *sound = [UNNotificationSound defaultSound];
content.sound = sound;//通知声音
content.categoryIdentifier = @"uid";//不要急,后面有解释

UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];//5秒后推送

NSString *localPath = [self getPathWithPhoteData:[[NSUserDefaults standardUserDefaults]objectForKey:@"photo"]];

if (localPath && ![localPath isEqualToString:@""]) {
UNNotificationAttachment * attachment = [UNNotificationAttachment attachmentWithIdentifier:@"photo" URL:[NSURL URLWithString:[@"file://" stringByAppendingString:localPath]] options:nil error:nil];
if (attachment) {
content.attachments = @[attachment];
}
//localPath是我通过拿到相册图片存到本地的路径(为什么不用url直接下载图片拼接本地路径呢,因为产品想要用,他们想自己从相册选照片!!!),总之把一个本地图片的url丢到attachment里面就可以发送一个有图片的通知了,视频也是一样用法呢。

第三部:伟大的推送请求~

UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"push" content:content trigger:trigger];
//参数就是触发时机和通知组建
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];

[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"%@", error);
}
}];

这是我的demo是一个可以自己输入内容发送通知,并且可以设置点击通知跳转到某网页的操作。

demo主页面(可以自己填写通知内容)
填写好信息
前台接收推送通知

第四部:处理通知

用到这个代理:UNUserNotificationCenterDelegate

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(nonnull UNNotificationResponse *)response withCompletionHandler:(nonnull void (^)())completionHandler {

处理用户与通知交互后的操作,我demo中的点击跳转网页就是在这里处理

}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {

// 允许在前台展示消息,不设置的话,默认是不行的

completionHandler(UNNotificationPresentationOptionAlert|UNNotificationPresentationOptionSound);
}
下拉展示图片
点击通知跳转到百度

接下来具体说说苹果关于通知的拓展框架:

前者负责自定义UI,后者负责交互处理在用户收到通知之前给一定的时间给我们处理事务

这部分写的人比较多,我来补个漏

有的人自定义的UI之后发现根本不显示,实际上要注意在info.里面的配置:

在NotificationContent里面的info.中,有3个key注意设置:
info.

1.ExtensionCategory负责绑定到通知中去,记得上面的content.categoryIdentifier = @"uid";
这里的ExtensionCategory要和content中设置的分类ID一致才能用过这个拓展框架显示自定义的UI

2.UNNotificationExtensionDefaultContentHidden 这个key是boolean类型,之前我设置好自定义UI之后发现,出现了两个title,两个message,是因为我们没有隐藏苹果官方格式的通知,隐藏掉就好了,这里要设置为YES

今天就写到这里啦~~谢谢大家。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,565评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,021评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,003评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,015评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,020评论 5 370
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,856评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,178评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,824评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,264评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,788评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,913评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,535评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,130评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,102评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,334评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,298评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,622评论 2 343

推荐阅读更多精彩内容