Notification Service Extension
在iOS10以前,想统计消息送达率并不准确,因为当App无进程的情况下无法捕获弹框操作,只能统计有进程情况下的弹框点击率,这无法满足运营同事工作的开展。但iOS10开始,苹果推出了“Notification Service Extension”消息扩展类(以下简称“消息扩展”),开发者可以监听并修改远程推送的弹框消息(仅支持远程推送)。消息扩展是Xcode8中加入众多extension的其中一种,实际为App提供额外功能,供iOS操作系统调用,开发者可在此扩展中添加自己的代码,因为由操作系统调用,所以可以实现无进程下执行添加的代码。
下面是消息扩展在消息推送中担任的角色,APNs 将消息首先推送给 ServiceExtension ,ServiceExtension 处理好数据后再展示给用户弹窗
创建扩展Targets
1、在原有项目上new一个target,如下图所示
2、创建Notification Service Extension,并填写product name,如下图所示
3、此时文件目录和targets列表会出现添加的扩展,选择适配的设备和版本
4、切换target调试方法:如果出现如图不出现添加的target,无法切换的情况,按照下面的步骤,就可以切换target进行debug调试
5、生成的新文件有两个方法,在 didReceiveNotificationRequest:withContentHandler: 里面可以处理远程推送内容,例如修改推送内容、下载图片等,修改远程推送内容的时间是有限的(不超过30S)。如果修改内容任务没有完成,系统会调用serviceExtensionTimeWillExpire方法,给你提供最后一次提供修改内容的机会。如果你没有修改远程推送成功,系统将会展示远程推送最原始的内容。这会出现什么使用场景呢?比如后台给用户单独推送的东西不想让别人捕获到,那么在后台推送的时候进行加密,然后到了客户端之后再进行解密,这样比较安全。
6、现在我们可以借用第三方远程推送工具测试能否捕捉(工具例如:SmartPush、Pusher等), 切换到扩展taget,在didReceiveNotificationRequest:withContentHandler:中打入断点,发现未执行此方法,原因是推送的内容中缺少一个字段“mutable-content:1” ,表示我们会在接收到通知时对内容进行更改。这样就走断点了,我们可以开始写我们的代码了(建议使用原生网络请求,免去配置第三方的麻烦)
AppGroups
此时虽然可以发送网络请求,但消息扩展和app的沙盒路径不同,没法将用户token等信息加到请求参数里,接下来就需要共享数据。
我们只介绍AppGroups,具体请访问链接:https://blog.csdn.net/shengpeng3344/article/details/52190997
这样就可以在推送出现时报告后台,实现精准统计送达率。