内容简介:推送
推送
推送详情
新版本产品大大要求增加图文推送的功能。
由于项目中已经集成了推送功能,故本篇只讲一下接入图片推送的相关Tips。
新建NotificationService、NotificationContent的流程
新建Target
bundle id
NotificationService的作用
下载图片/音频/视频文件(注意:下载时间只有30秒、超时通过serviceExtensionTimeWillExpire方法进行迅速处理)。
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { self.contentHandler = contentHandler; self.bestAttemptContent = [request.content mutableCopy]; NSString *subTitle = [[request.content.userInfo valueForKey:@"推送中自定义的字典字段"] valueForKey:@"自定义副标题字段"]; NSString *attchUrl = [[request.content.userInfo valueForKey:@"推送中自定义的字典字段"] valueForKey:@"自定义图片字段"]; self.bestAttemptContent.subtitle = subTitle.length > 0 ? subTitle : @""; //1. 下载 NSURL *url = [NSURL URLWithString:attchUrl]; NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration]; NSURLSession *session = [NSURLSession sessionWithConfiguration:config]; NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (!error) { //2. 保存数据, 不可以存储到不存在的路径 NSString *path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"logo.png"]; UIImage *image = [UIImage imageWithData:data]; [UIImageJPEGRepresentation(image, 1) writeToFile:path options:NSAtomicWrite error:&err]; //3. 添加附件 UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"remote-atta1" URL:[NSURL fileURLWithPath:path] options:nil error:&err]; if (attachment) { self.bestAttemptContent.attachments = @[attachment]; } } self.contentHandler(self.bestAttemptContent); }]; [task resume]; }
下载超时,则通过下面的方法,改成展示原有系统样式。
- (void)serviceExtensionTimeWillExpire { self.contentHandler(self.bestAttemptContent); }
如何使推送走NotificationService的处理?
服务端设置"mutable-content":1 ,这样推送过来就会走NotificationService的处理逻辑。
{ "aps":{ "alert":{ "title":"iOS 10 title", "subtitle":"iOS 10 subtitle", "body":"iOS 10 body" }, "my-attachment":"http://img01.taopic.com/160317/240440-16031FU23937.jpg", "mutable-content":1, "category":"myNotificationCategory1", "sound":"default", "badge":3 } }
所有的操作都对了,为什么还是不能走NotificationService的断点?
-
首先说一下UNNotificationContentExtension的调试:直接切换target,点击run即可。
-
而UNNotificationServiceExtension,因为该代码完全处于后台执行(不像UNNotificationContentExtension可以由通知界面打开触发),像上面那种方式调试还是不会走断点,这就需要Debug -> Attach to process by pID or name:
NotificationContent作用
UNNotificationContentExtension用于自定义3D Touch后弹出的视图,并且可以用UNNotificationAction自定义按钮。
NotificationContent注意点
1、若想使用NotificationContent自定义3D Touch后弹出的视图,必须让服务端设置"category":"your categoryId"参数,这个参数在UNNotificationContentExtension的info.plist中设置,只有服务端配置的category和你本地设置的一样,才会走你自定义的NotificationContent。并且category可以设置多个,即可以有多套自定义3D Touch UI。
2、如果普通推送,则"mutable-content","category"两个参数都不要设置或为空。
3、NotificationService、NotificationContent都需要设置一下AllowArbitraryLoads为YES。
参考(偷了个懒,部分图片引用自下方文章,感谢~):
作者:dj_rose
链接:https://www.jianshu.com/p/0ab721604877
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Match开发笔记 肆 极光推送接入指南(Swift版)
- 微信公众号开发C#系列-7、消息管理-接收事件推送
- 苹果watchOS 6.1.2开发者预览版Beta 2推送
- ApiCloud开发SuperWebView——极光推送不能监听通知内容以及不能跳转的问题
- Laravel 中使用 swoole 项目实战开发案例二 (后端主动分场景给界面推送消息)
- wechat_pusher - 基于Golang开发的高性能微信消息定时推送框架
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
微信公众号深度解析
魏艳 / 化学工业出版社 / 2017-5 / 49.80元
本书是一本微信公众号营销的教科书,全方位揭秘了微信订阅号、微信服务号、微信企业号三大类型账号的运营管理策略和技巧,有助于企业构建一套全新的微信公众号营销体系,打造一个移动端的商业帝国,是企业和微商必读的微信公众号营销和运营宝典。 《微信公众号深度解析:订阅号+服务号+企业号三号运营全攻略》突出了“新”、“全”、“实战”三大特点,阐述了微信公众号在新形势下的现状、发展趋势和三大类型;微信公众号......一起来看看 《微信公众号深度解析》 这本书的介绍吧!