个推开发中的测试数据及分析
开发中使用了 5 台设备。
安卓:小米3(4.4.4)、锤子T2(5.1.1)、海马玩模拟器(4.2.2)、雷电模拟器(5.1.1)。
苹果:iPhone 6(iOS 11.0.3)。
个推支持 4 中推送模板。
①. 透传推送:点击通知打开网页模板(IGtLinkTemplate)。
②. 普通推送:点击通知打开应用模板(IGtNotificationTemplate)。
③. 链接推送:点击通知弹框下载模板(IGtNotyPopLoadTemplate)
④. 下载推送:透传消息模版(IGtTransmissionTemplate)。
因为 链接推送、下载推送 平时基本上不用,所以本方案没有纳入测试和封装,需要的朋友自己处理吧。
透传推送 和 普通推送 能够达到大体一致的效果。
透传推送,后台发送标准推送数据格式的推送时,APP 能收到一条带参数的推送。
普通推送,后台发送带透传数据的推送时,APP 也能收到一条带参数的推送。
所以,我对这两种推送模板做了分组对比测试。
还有一点,关于个推官方定义的 推送数据的标准格式和非标准格式,很多开发者都不是很理解,包括我在内,最开始因为不是很理解,按照自己想当然的思路对 5 台设备进行了测试,经过大量重复操作后,得到一组可观的数据,但是,无意中发现自己理解有误,导致之前的数据作废,也算是一个大坑,所以我还是简单的展示下两种模式的区别吧。
标准格式:
必须符合这个样子,{title:"标题",content:"内容",payload:"数据"}。
// 标准格式 $Message1 = [ "title"=> "健康告知", "content"=> "您的中二病已经很严重了!", "payload"=>[ "push"=> "inner", "event"=> "warning", "silent"=> false, "data"=> "" ] ];
非标准格式:
只要不是上面的那种格式就满足(比如,缺少 payload 参数)。
// 非标准格式 $Message2 = [ "title"=> "健康告知", "content"=> "您的中二病已经很严重了!", "push"=> "inner", "event"=> "warning", "silent"=> false, "data"=> "" ];
最重要的一点:
只有发送标准格式数据,APP才能收到推送(外推)!!!
只有发送标准格式数据,APP才能收到推送(外推)!!!
只有发送标准格式数据,APP才能收到推送(外推)!!!
好了,下面是我测试的五组数据。
海马玩模拟器(Android 4.2.2)
推送类型 | 数据类型 | APP 在前台时 | APP 在后台时 | APP 在关闭时 |
---|---|---|---|---|
普通推送 | 标准格式 | 可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
非标准格式 | 可以收到推送 (点击触发 Receive) |
可以收到推送 (点击触发 Receive) |
可以收到推送 (点击触发 Receive) |
|
透传推送 | 标准格式 | 可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
非标准格式 | 不可以收到推送 (自动触发 Receive) |
不可以收到推送 (自动触发 Receive) |
不可以收到推送 (也不自动触发 Receive,打开后触发 Receive) |
雷电模拟器(Android 5.1.1)
推送类型 | 数据类型 | APP 在前台时 | APP 在后台时 | APP 在关闭时 |
---|---|---|---|---|
普通推送 | 标准格式 | 可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
非标准格式 | 可以收到推送 (点击触发 Receive) |
可以收到推送 (点击触发 Receive) |
可以收到推送 (点击触发 Receive) |
|
透传推送 | 标准格式 | 可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
非标准格式 | 不可以收到推送 (自动触发 Receive) |
不可以收到推送 (自动触发 Receive) |
不可以收到推送 (也不自动触发 Receive,打开后触发 Receive) |
小米3(Android 4.4.4)
推送类型 | 数据类型 | APP 在前台时 | APP 在后台时 | APP 在关闭时 |
---|---|---|---|---|
普通推送 | 标准格式 | 可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
不可以收到推送 (也不自动触发 Receive,打开后收到推送,点击触发 Click) |
非标准格式 | 可以收到推送 (点击触发 Receive) |
可以收到推送 (点击触发 Receive) |
不可以收到推送 (也不自动触发 Receive,打开后收到推送,点击触发 Receive) |
|
透传推送 | 标准格式 | 可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
不可以收到推送 (也不自动触发 Receive,打开后收到推送,点击触发 Click) |
非标准格式 | 不可以收到推送 (自动触发 Receive) |
不可以收到推送 (自动触发 Receive) |
不可以收到推送 (也不自动触发 Receive,打开后触发 Receive) |
锤子T2(Android 5.1.1)
推送类型 | 数据类型 | APP 在前台时 | APP 在后台时 | APP 在关闭时 |
---|---|---|---|---|
普通推送 | 标准格式 | 可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
不可以收到推送 (也不自动触发 Receive,打开后收到推送,点击触发 Click) |
非标准格式 | 可以收到推送 (点击触发 Receive) |
可以收到推送 (点击触发 Receive) |
不可以收到推送 (也不自动触发 Receive,打开后收到推送,点击触发 Receive) |
|
透传推送 | 标准格式 | 可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
不可以收到推送 (也不自动触发 Receive,打开后收到推送,点击触发 Click) |
非标准格式 | 不可以收到推送 (自动触发 Receive) |
不可以收到推送 (自动触发 Receive) |
不可以收到推送 (也不自动触发 Receive,打开后触发 Receive) |
iPhone 6(iOS 11.0.3)
推送类型 | 数据类型 | APP 在前台时 | APP 在后台时 | APP 在关闭时 |
---|---|---|---|---|
普通推送 | 标准格式 | 不可以收到推送 弹出对话框 (点击触发 Receive) |
不可以收到推送 弹出对话框 (点击无反应) |
不可以收到推送 打开后弹出对话框 (点击无反应) |
非标准格式 | 不可以收到推送 弹出对话框 (点击触发 Receive) |
不可以收到推送 弹出对话框 (点击无反应) |
不可以收到推送 打开后弹出对话框 (点击无反应) |
|
透传推送 | 标准格式 | 不可以收到推送 (自动触发 Receive) |
可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
非标准格式 | 不可以收到推送 (自动触发 Receive) |
可以收到推送 (点击触发 Click) |
可以收到推送 (点击触发 Click) |
数据分析:
①. 安卓
测试后发现,小米3、锤子T2 关闭应用后,自动清除了个推的后台驻留进程,所以这种情况是没有办法解决的,很显然,真实手机(小米3、锤子T2)的数据已经废了。
海马玩和雷电的数据完全一致,我们就看雷电的数据。
第一组数据方案(带透传信息的普通推送),如果你亲自测试,你会发现,APP 会收到两条推送,普通推送模板默认发送一条,设置了带有标准数据格式的透传信息也会发送一条,很显然,不符合实际场景,排除这种方案。
第四组数据方案(非标准格式的透传推送),实现内推,所以这种方案是有用的。
第二组和第三组数据方案,实现的效果一致,那么既然是方案整合(应该有内推功能),所以应该选第三组,因为它和第四组(内推)共用一个模板(IGtTransmissionTemplate),在实际操作中,只需要切换数据格式(标准、非标准)来实现 内推、外推 的切换,能够节省不少代码。
②. 苹果
普通推送,APP 会自动弹出一个 bug 一样的确认对话框,点击“取消”也会触发确认时间,所以,数据作废。
透传推送,苹果手机比较特别,APP 在前台时,个推会发送内推,在后台或关闭时,个推会借助苹果的 APN 发送苹果的推送。
综上,选择透传推送的两种数据格式(标准、非标准)能够完美解决推送问题。