iOS 统计Push到达率

iOS使用Notification Service Extension统计iOS 10后的Push到达率

只能统计iOS 10之后版本,iOS 10之前无效

Notification Service Extension此扩展为苹果官方在iOS 10推出的扩展类,可以在展示Push横幅前截取Push,对Push进行对其展示、文案、等其他的东西进行修改。但是此扩展也可以进行对Push到达率进行统计,因为之前只能统计点击率。

本文中有任何问题,本人均会一一回复,该文档会持续更新,现在我们公司的项目已正常上线,无任何问题

前提
为什么不使用下方API,因为该方法部分场景下是无法捕获push的,并附上官方文档

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler NS_AVAILABLE_IOS(7_0);

官方文档

Use this method to process incoming remote notifications for your app. Unlike the application:didReceiveRemoteNotification: method, which is called only when your app is running in the foreground, the system calls this method when your app is running in the foreground or background. In addition, if you enabled the remote notifications background mode, the system launches your app (or wakes it from the suspended state) and puts it in the background state when a remote notification arrives. However, the system does not automatically launch your app if the user has force-quit it. In that situation, the user must relaunch your app or restart the device before the system attempts to launch your app automatically again.

本人开发环境

如果使用SmartPush 进行推送测试
可以使用以下json

{
"aps":{
        "alert":"This is some fancy message.",
        "badge":6,
        "mutable-content":1,
        "sound":"default"
    }
}

举一反三

1、可以实现push到达率统计功能
2、可以实现不启动APP,下载小文件功能
3、可以进行push信息脱敏处理功能
4、可以更改提示音功能
5、and so on。。。。。。。。

官方文档

https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension

https://developer.apple.com/documentation/usernotifications/modifying_content_in_newly_delivered_notifications?language=objc

Notification Service Extension概述

如下图所示 APNs 是将消息首先推送给 ServiceExtension ,ServiceExtension 会处理好数据后再展示给用户一个优美的界面,ServiceExtension 就是一个厨师,收到原材料,给用户做成美味的食物一样,so sweat!

2379949-77cd32e4ee3934d7.png

在展示用户推送内容前,UNNotificationServiceExtension 是修改远程推送携带的内容。UNNotificationServiceExtension 类 可以让开发者自定义推送展示的内容,Notification Service app extension 不会自己提供推送界面的,当将适当类型的推送传递给用户的设备时,它会按需启动。你可以用 extension 修改推送内容和下载推送相关的资源。你可以在extension 中解密和加密的数据或下载推送相关的图片。

你不需要自己创建 UNNotificationServiceExtension 实例,Xcode 已经帮我们创建好了。当满足如下两个条件,应用收到远程推送时,应用会加载 extension 和调用 didReceiveNotificationRequest:withContentHandler: 方法。

在 didReceiveNotificationRequest:withContentHandler: 里面可以处理远程推送内容,修改远程推送内容的时间是有限的(不超过30S)。如果修改内容任务没有完成,系统会调用 serviceExtensionTimeWillExpire 方法,给你提供最后一次提供修改内容的机会。如果你没有修改远程推送成功,系统将会展示远程推送最原始的内容。

创建扩展Target

1、在原有项目上new一个target,如下图所示
屏幕快照 2018-01-30 下午4.23.56.png
2、创建Notification Service Extension,如下图所示
屏幕快照 2018-01-30 下午4.25.00.png
3、自定义名称,其他的不需要更改,系统会自动配置

截获push前提

1、需要新增一个字段mutable-content": "1",在aps内部,即与alert同级,如下图所示
lALPBbCc1WBFE6XNARPNAfI_498_275.png_620x10000q90g.jpg
  • 远程推送的 aps 字典中,mutable-content : 1

    The remote notification’s aps dictionary includes the mutable-content key with the value set to 1.

2、alert不能为空
  • 远程通知的配置是展示 Alert

    The remote notification is configured to display an alert.

3、两个target的info.plist均需要配置 - http请求
  • 不进行配置时会报如下图错误


    2379949-b128133f158736d1.png
  • 右键点击info.plist,Open As -> Source Code 将下面的代码填入最后的</dict> </plist>前即可
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

调试

1、先run主target,如下图所示
屏幕快照 2018-01-30 下午4.50.49.png
2、再run Notification Service Extension,如下图所示
屏幕快照 2018-01-30 下午4.50.59.png
3、最后,手动选择你的主target,或者search,如下图所示
屏幕快照 2018-01-30 下午4.51.11.png
这样在收到push时,就可以进行打印Log或者断点进行调试了

关于文件共享

选定指定.m文件后,在target memberShip中勾选要共享至的target,然后在指定target的指定文件引用头文件可以正常使用

image.png

统计Push到达率

1)操作方法
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler 
2)极光推送统计

极光有一个小的子SDK,可用于采集push到达率,建议使用这种方式

3)server端推送统计
  • 可以让server端在push中加一个类似pushId的字段
  • 在NotificationService中的didReceiveNotificationRequest方法中获取self.bestAttemptContent.userInfo
  • 使用NSURLSessionTask(建议使用官方网络)进行将规定的pushId进行post请求发给server端进行统计push到达率
3)其他策略
  • 也可以使用下面提到的数据共享,先将该Extension中的push携带数据暂存,然后在宿主APP启动时获取,又可以做很多东西~

数据获取(数据共享)

PS

  • 可尝试以下的链接中的方式配合断点测试流程
    https://github.com/liuyanhongwl/ios_common/blob/master/files/App-Extension-Tips.md
    我做这块的时候不知道是电脑的问题还是什么问题,就是各种不走断点

  • 如果使用NotificationServiceExtension 通过以下连接中的操作还是不走断点的话并且打印 Program ended with exit code: 0的话,断开真机与Xcode连接即可,则会走extension中的代码了,具体原因未知,望大神告知,初步认为Xcode的bug。(使用上文提到的xcode版本,可以一直走断点,前后操作了数十次,均没有问题
    2019年5月29日)

  • 推翻网络上的部分文章 - 实测集成了Notification Service Extension可安装app - 2018/3/6 下午12:01:01

  • 如果接入了Notification Service Extension时收不到push,需要确认以下几点

1、确认子target最低支持版本是否为iOS10,且该机器系统版本高于iOS10
2、子target的APP ID,PP文件中的bundle ID是否与xcode中一致
3、运行的是否为子target
如果都正确,则重启电脑和手机,妥妥的可以接收到push(本人亲测,因为该问题解决了5个小时,结果重启就可以了。。。)

https://www.jianshu.com/p/e458879f188d?appinstall=0
https://zhidao.baidu.com/question/1801940902903964387.html
两文章提到iOS 10以下无法安装集成Notification Service Extension的app,本人亲测,可安装

参考文章

<iOS 远程推送> iOS 10 UNNotificationServiceExtension

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

推荐阅读更多精彩内容