个推开发中的测试数据及分析

开发中使用了 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 发送苹果的推送。


综上,选择透传推送的两种数据格式(标准、非标准)能够完美解决推送问题。