Android 第三方 Push 推送方案使用调查
Trinea opened this issue · 207 comments
目前市场上很多三方推送方案,很多朋友问到哪个更稳定、到达率更高。
大家可以讲下自己项目中用到的及遇到的坑。
三方推送方案包括:
较早的 JPush、个推
后来腾讯的信鸽、小米推送、百度推送、华为推送、友盟推送。
PS:知乎上有类似的问题,但答案被大量水军充斥,这里会清净的多。
先沙发:
二年前在创业公司用过个推的推送,百万量级用户,到达率不高、问题挺多,算是早期的小白鼠
请教一下:一个应用如果同时集成多个推送服务,服务器根据推送服务商网络稳定情况,自动切换推送服务,是不能提高推送率?
目前用的jpush 免费的 所以送达率不是很高 公司不肯出钱 将就用
大众点评13年的时候用过小米推送,到达率统计有60%左右,属于小米推送的早期用户吧,据说踩了不少坑,后面自己去做了推送。
个推没有组的概念,只有通过tag去区分,不知道你们是怎么进行测试的?
有个开源的推送:http://www.ddpush.net/overview
可以了解下
我们公司用的友盟的推送,用户不是很多,感觉一般,之前用个推好像对服务器有限制的。。。
目前也是用的小米推送,官方统计的到达率也是60%左右,之前用过百度推送,到达率差不多,但太多坑,各种不兼容造成崩溃、Application循环重启、手机发烫等
用的是极光,在某些网络运营商下,会注册失败
目前用的是腾讯信鸽!用户量不是很大!
百度和友盟
Leancloud的不错就是了
百度、JPush都用过都存在一些问题
用的个推 产品还没发布 内部网非常快 秒推 估计也没有参考意义 呵呵
创业公司 个推用了两年 现在换做信鸽 慢慢尝试中 个推的问题主要有 消息被缓存后不能顺序送达 信号不好 网络切换频繁 以及一些奇葩网络环境 如电信 移动需加代理的情形是无可送达的 服务被干掉时有发生 且在诸如华为这样的机型上是没法自启 后面信鸽也出现了 可能是业界难题 可对于带点IM性质的app很致命
关键是到达率。IM对消息即时性的要求很高,还是不要用推送做IM吧。
同时用两家方案以提升到达率的想法值得试试。
项目当中用过极光。大家可能没听说过Google刚收购的Firebase,专注做实时数据同步的,推送和IM都能做。参加过他们的30分钟教你做一个IM应用的课程,挺不错的。可以试试墙内能不能使用。
大家推送的到达率是怎么统计的?
项目用过jpush,容易出现提交tag和alias延迟,推送到达率还可以,就普遍都比较慢,但后来因为量实在太高,即使是企业合作,费用还是高得有点难接受。
后来用开源的gopush自己搭建推送服务器,推送速度比jpush还快,只是缺少jpush的tag那块功能,需要后端业务自己实现,据说gopush作者目前在做GoIM,还未上线...
用的jpush 没有统计到达率
目前项目里面打算用友盟来做推送,不知道靠谱否
用过JPUSH 到达率没有统计过,当时是做过年群发短信,百万级用户
目前用的腾讯的信鸽推送,不是很稳定,有时推送较慢,不及时。
目前还没做过推送,mark一下
百度, 极光, 小米, 个推都用过,集成比较简单, 但到达率一般 做电商应用, 最后公司(投资人)担心信息泄露, 准备基于MQTT协议搭建自己的推送.
准备试一下 LeanCloud 的推送服务,有人用过吗?效果怎么样。
之前公司使用第三方友盟推送SDK,快、到达率高
我最近在用LeanCloud的推送服务,到达率没测,不过测试阶段算是秒推吧。但是他们的技术支持非常不到位,而且工单还收费了;前不久还全线服务不能用几个小时。
用过极光,不过体验不是很好:broken_heart:
公司有钱,7,800w(具体不清楚)买了ibm的message sight(软硬件一体,基于ibm的开源协议mqtt)做推送,性能说是不保证达到每秒4000w,保证达到每秒600w左右,看到内存150g,我信了,可惜就买了一台,做不了主备,然并卵。诸君有兴趣去了解下.
先说结论:小米推送是目前国内最好的推送,如果你还在犹豫选择什么推送,请选择小米推送吧。
根据友盟指数,目前国内活跃设备前十名中,小米占6位,三星占4位,数据出处:http://www.umindex.com/
这里我们可以把 Android手机简单的分为小米手机和其它手机。
小米手机:
小米推送在小米手机上是系统级服务,其它第三方推送的到达率肯定比不过它
其它手机:
小米推送和其它第三方推送到达率差不多
由于小米手机市场占有率比较高,所以小米推送应该是国内最好的推送了。
下面一些应用可以从侧面来证明我的推断:
腾讯新闻使用的小米推送,它没有使用自己家的信鸽推送
淘宝使用的是小米推送(Google Play上的版本应该应该是 GCM),以淘宝的技术,应该是可以自己做推送的,由于小米手机比较多,他们还是选择了小米推送
百度视频和爱奇艺使用的是小米推送,没有用自家的百度推送
其它使用小米推送的 App 可以参考小米开发者网站:http://dev.xiaomi.com/doc/?page_id=1670
目前在使用腾讯信鸽推送,也有很多问题,不稳定是主要的,另外就是到达率不高,好的情况下60%,坏的情况下40%也不到
目前用的信鸽推送,到达率还不清楚
目前用信鸽,有延时。到达率差不多60%。
极光推送还不错 具体没统计过 到达率不错感觉
百度,jpush,小米都用过,小米算是比较稳定,从后台数据看到达率也高。
从友盟指数,前十有好几款是小米手机,还有上亿用户APP也在用:淘宝,爱奇艺视频,今日头条等。
百度推送过来的通知消息如果隔了较长时间才去点击通知的话,打开对应的应用挺久才反应过来,不知道是不是手机卡的问题,用的是三星S5。小米推送的不会,隔了较长时间点击通知基本上马上打开。
app不在前台推送也能到达,这才是好推送。
之前一直用的极光,没有特别统计过,感觉到达率就很高。我用极光推送做过一个实时报价的软件,每一分钟推送一次,每次几千用户,到达率刚刚的,没有用户抱怨。后来又用在另外一个软件里,这个推送频率低,有用户抱怨收到比较晚,但是还好。
这两天试用的友盟推送,推送到登记到友盟后台的测试设备,小米2S,发现很蛋疼啊:应用如果被杀掉,推送就根本到达不了!
不知道有朋友用过友盟推送吗?如果他有这样的缺陷,那么我们用他没有太大意义啊!
其实现在大多数推送都是单向的,就是用restful api 给设备推消息。由于是单向推送,设备收到消息怎么反馈给推送服务呢?难道再调用一次restful api,或者自己再设计一个协议回给服务? 现在很多推送都在说自己到达率到底有多高,但是这个到达率怎么得到的,谁也不知道。
如果了解mqtt协议的话,应该知道,mqtt是双向的。a给b推消息,b要回puback,a才知道消息已经推送成功,否则a会认为b没有收到消息,会保存消息,直到b回了puback。
所以通过mqtt协议,可以通过puback来实时计算到达率(如果qos=1)。当然推送仅仅看到达率是不够的,推送是否稳定,高效,各个平台之间是否可以相互通信,这些指标也很重要。
yunba.io 也在做类似的事情,就是提供各个平台之间的实时消息通信服务。 现在已经可以支持嵌入式设备(c sdk, c# sdk),web端(socketio),Android/iOS端之间的相互通信。 如果你的平台不支持,你可以自己实现平台的sdk,因为云巴的协议是开放的,大多数sdk也开放的,具体可以看 github。
我觉得大家要说自己的服务有多好,至少要告诉大家为什么,不然口说无凭,有什么意思呢?
之前用过JPUSH免费版的,在某些低版本的手机上竟然跟其他SDK有冲突,导致其他SDK不能用
这博客作者是友盟研发总监,也许正说出了他们的痛楚,就是app如果不驻内存,就很难送达。
这是实情。
而且App越来越难常驻内存。
这周刚处理了一个用户的问题,问题不说了,原因是这用户使用的华为手机,为了省电,有一个系统设置开关,是一锁屏就会干掉我们的应用程序!
为此,小米的自我标榜也不算是吹牛逼:“小米推送服务支持所有Android平台,在MIUI上属于系统服务框架,共享系统级长连接。”
上周,我先用的友盟推送,集成的确简单,但是很悲催地发现,不启动应用,都不能收到推送消息。考虑到我们的目的主要是为了唤醒睡眠用户,感觉这样就没什么用了。
然后就试了试小米,发现的确是就算把应用手动杀掉,推送也能到达。(测试手机:小米2S)
已经开始上线了,用一段时间试试看。
@firebear 你这个说明不了什么问题啊,用小米的推送,在华为手机上,一样会被干掉的。 只能说小米的推送可能在小米的系统上是系统级的,类似iOS的APNS。 但是Android手机厂商那么多,小米推送这个优势没有什么意义。
如果做不了常驻内存,首选小米推送,毕竟已经是市场份额第一了
On Mon, Aug 3, 2015 at 11:03 AM linbo.liao notifications@github.com wrote:
@firebear https://github.com/firebear
你这个说明不了什么问题啊,用小米的推送,在华为手机上,一样会被干掉的。 只能说小米的推送可能在小米的系统上是系统级的,类似iOS的APNS。
但是Android手机厂商那么多,小米推送这个优势没有什么意义。—
Reply to this email directly or view it on GitHub
#4 (comment).
我们的用户,小米一家已经占了一半以上。这是我们选择小米的重要原因。
目前集成小米推送的版本,已经上线了5000多用户,从小米后台的统计数据看,日活跃用户基本和总用户数吻合。换句话说,集成小米推送的版本,基本上都能连上小米的推送服务器。
当然,具体推送效果,还有待真正推送开始以后看。
我会持续关注和更新这个帖子。希望和大家交流,选好最适合自己的推送平台。
当然,如果最终的结论是各有所长各有所短,那就选技术支持妹子声音比较甜的那家。
第一次小米推送的数据来了。
昨天送达37251次,点击8485次,点击率23%。
我们支持小米推送的版本,昨天大概升级了64000,这样算来,小米的首日推送到达率:58%,和网上评价差不多。
活跃用户比推送前一日上升了16%,还可以,但是比期望值差不少。
发现一个问题是:推送开始以后,即使我把推送结束日期定在一个月后,推送开始之后新安装的客户端,就算是小米2S,也收不到推送。
有其他同学用过吗?来对比一下。
不是小米的人不知道他们怎么做的。
要做其实不难吧,关键是看送达是什么标准。
一般这种推送是长链接,TCP的,那么TCP有个“发送成功”,可以作为标准,当然这也不意味着就“接收成功”,要算“送达”了,也说得过去。但如果客户端收到以后,能发回一个确认,OK,那肯定算是“送达”了。
点击呢,也类似,用户点了消息以后,客户端往服务器端发一个消息,服务器端收不到,就不会记入点击数。收到了,才算。
瞎猜的。
第一次小米推送7天了,来个统计。
第几天 送达率 点击率
1 53% 23%
2 63% 23%
3 70% 22%
4 74% 22%
5 77% 22%
6 80% 22%
7 82% 22%
感觉最近信鸽的到达率简直惨不人睹
用百度云推送吧,亚马逊**的云服务都直接集成了云推送的SDK。另外,里面有我写的代码啊,逃。。。
正在试用云巴
小米推送确实很不错,值得推荐
一直用的JPush,当时选他主要还是免费,再加看起来比较靠谱。
在网络条件好的情况基本没什么问题,当然也有坑爹的地方,之前做的项目(2年前)是个用户下单,快递员抢单送单(同城快递)的功能,要求实时性比较高,但是快递员成天在外面跑,用的都是2G、3G网络(上海地区)(当时并没有4G),碰到地铁、隧道,断网的情况更是不要太平常,然后这个超时重连就是个大问题了,这里是我当时问的问题
https://www.jpush.cn/qa/?qa=1767/%E8%AF%B7%E9%97%AE%E5%85%B3%E4%BA%8E%E6%8E%A8%E9%80%81%E5%BF%83%E8%B7%B3%E7%AD%96%E7%95%A5%E7%9A%84%E9%87%8D%E8%BF%9E%E6%9C%BA%E5%88%B6
也就是极端情况,有至少5min的延迟(现在重连策略应该优化了吧?好久没再去了解了),不过这个应该所有推送三方都会有这个问题吧...还有其他问题,主要还是类似 注册失败 和 设置别名超时。优化重连,超时重新设置策略可以有效改善类似情况导致的问题,而且后台也需要做一些相应的超时未送达处理逻辑(三方提供的毕竟只是个工具功能)。我可以说还好最后项目没有做下去,可以不用纠结下去了么...哈哈哈
现在做的项目依然在用JPush(依然是免费版的),一个是实时性要求并不用多高,一个也懒得换,送达率还是比较高的(不知道收费版什么效果),至少没有用户反应。个人认为做推送这种,做的久才成熟吧...
然后还有一个问题,Android端使用了默认的通知推送,客户反映不点的话,通知条数就会越来越多,所以后面我们准备优化改成自定义推送,就可以自定义合并通知了,这样又有了更多的优化空间,类似收到消息、点击消息的回调等等。
我觉得 @feicien 说的还是比较客观的(小米推送在小米系统里给自己开后门,这不公平! =。=)
恩,看来以后要用小米了
以前用过个推,感觉还行。综上所述,下个app小米推送了
一些巨头的app都是自有push结合gcm使用的, 国内只能用自有的, 国外以gcm为主, 自有push辅助. 好吧, 感觉这俩都不算第三方....
上个app用的小米推送,总的来说还可以吧。服务团队比较好。
雪球和豆瓣用的都是自己的推送 一般稍大的公司为了防止信息外泄都会自己开发吧
我自己的项目是用的GCM+小米组合
根据用户的情况来选择
公司早期版本用的极光推送,由于延迟现在自己做TCP长连接.
如果用户需要经常启动APP,比如快递小哥或者的哥的App,常驻前台,服务器撑得住,那就自己做TCP长链接最好!
小米+信鸽, 小米设备走小米推送防止被系统干掉,其他设备走信鸽。
小米推送的SDK写起来有点坑,提供同步方法却做异步的事,一个命令之后才能进行下一个命令操作,不知道各位在使用小米Push的时候有没有做额外处理?
PS:后来因为使用第三方Push会受制与人,并且在各方调整下也不是很方便可靠;我们已经自己开发了采用Go编写的Push服务和SDK,目前使用的是自家开发的GoPush。
说一下我司的推送历程吧:
公司之前的一个项目自己借助开源基于xmpp实现了一个推送,各种bug,不讲了,都是泪
去年一个新项目推送用的信鸽,到达率总不是令人满意, 下半年换了LeanCloud,Android和Ios都用之, 很好,稳定
BTW:LeanCloud的Api文档写得真好,很用心啊,不像某些(这边就不提名了)
1.百度云用过,他们升级不兼容旧版本,都是泪
2.换了云巴,代码简练,别人云巴是走支持全设备的方向,到达率我没做统计,但基本还算稳定
3.后面看了友盟(淘宝系),居然自身的sdk,还兼着集成小米推送,聪明
4.不小心搜了下,阿里的移动推送,还更牛X,集成小米和华为推送,正道
https://help.aliyun.com/document_detail/mobilepush/sdk/android-sdk/advanced.html?spm=5176.docmobilepush/sdk/android-sdk/push-config.6.90.PhhZsh
所以,正确的推送方案都是应该如此(不是系统推送,App杀掉都是起不来的)
1.第三方推送方案+小米推送+华为推送(两个系统推送去唤醒 普通推送)
2.如果你是支持国外的应用,记得把,GCM也加上
谢谢,楼下评论下,大伙请试用下。。
雷死我了,可以说阿里的产品经理太接地气了吗?
在 2015年12月31日 下午4:04,eywalink notifications@github.com写道:
1.百度云用过,他们升级不兼容旧版本,都是泪
2.换了云巴,代码简练,别人云巴是走支持全设备的方向,到达率没做统计。
3.后面看了友盟(淘宝系),居然自身的sdk,还兼着集成小米推送,聪明
4.不小心搜了下,阿里的移动推送,还更牛X,集成小米和华为推送,正道所以,正确的推送方案都是应该如此
1.普通推送方案+小米推送+华为推送(两个系统推送去唤醒 普通推送)
2.如果你是支持国外的应用,记得把,GCM也加上谢谢
—
Reply to this email directly or view it on GitHub
#4 (comment).
此致
敬礼
张雄
我是一只小小小小小小小熊,怎么吃也吃也吃不饱!
腾讯的信鸽导致游戏的崩溃极略高,基本都死在注册回调那里,可能是线程安全问题导致的。
--- 修正,后来发现是信鸽回调里,我们自己调用了JNI方法导致容易崩溃。改到放至glview线程就暂时没发现太大问题。
机智的阿里的
阿里的太机制了.... 当我看了之后才发现... 阿里的机智如斯啊...
我们集成的小米推送,不过在三星,魅族这两个机型上有问题,需要在应用打开时才会收到推送;不知道你们有没有这个问题?
现在rom厂商对app限制比较严格了,实在不行,我们也在参考楼上的:小米+ 华为。解决这大部分手机用户的推送问题,。
**build: 第三方+小米+华为是正道。
国外build:GCM
以后Android N启用Doze模式,国内开发者貌似就只能依赖系统的推送了。可三星这么庞大的用户量,没有提供自由推送的集成方案,以后三星设备上消息到达率咋办呀?
阿里已经不能够了!!
我们公司 一直使用个推 稳定性各方面感觉都还好。DAU 500万量级的应用,现在明显感到在小米上,push到达率不高。
@liyanlei666 『阿里已经不能够』是什么意思?用不了?
看样子,阿里的推送最合适咯?
@kaichen @xushaojie 阿里的push,虽然有可以集成高级小米、华为功能,但是就和小米官方push对比还是有区别的,主要是应用后台没有进程的情况下,小米官方push可以弹出通知(弹出push的组件是小米rom实现的),但是阿里不行,需要开启自启动功能。
阿里的推送集成小米、华为其实跟自己通过设备来做区别处理是一样的。只是把阿里的推送服务器作为路由再向小米(华为)发送一次推送的请求。
当然,如果你需要在第三方的机型上使用阿里推送的话,直接使用阿里集成小米+华为是最方便的。
无意间围观到了mi_push_sdk
的源码.
if("com.xiaomi.mipush.sdk.WAKEUP".equals(var1.getAction())) {
if(com.xiaomi.mipush.sdk.a.a(this).i()) {
g.a(this).a();
}
}
public void a() {
this.c.startService(this.h());
}
private Intent h() {
Intent var1 = new Intent();
String var2 = this.c.getPackageName();
if(this.b() && !"com.xiaomi.xmsf".equals(var2)) {
var1.setPackage("com.xiaomi.xmsf");
var1.setClassName("com.xiaomi.xmsf", this.i());
var1.putExtra("mipush_app_package", var2);
this.j();
} else {
this.k();
//启动这个service
var1.setComponent(new ComponentName(this.c, "com.xiaomi.push.service.XMPushService"));
var1.putExtra("mipush_app_package", var2);
}
return var1;
}
有人用过华为推送吗?华为推送免费版好像回推广告是什么情况
@Lotus-c 我刚做了对华为推送的测试,虽然是在EMUI上是系统级service,但没有任何卵用,杀进程和重启后,收不到任何推送(在EMUI3.1上杀进程后可以收到推送),关键是文档稀烂,问了开发者,回答问题也是莫名其妙,不支持alias(可以用tag实现),对透传的支持API竟然一次只能发送1000个设备。so还是不要考虑了。
Google GCM服务怎么样?
@kaktos 请问你说的华为推送在华为手机上,进程干掉以后也收不到,是指通知栏消息还是透传消息?还是都收不到?如果透传的话应该是正常的呀,透传消息要求保留进程的
没人用google gcm么 怎么app杀死后 收不到推送 只有打开可以
测试了一下 gcm在nexus上app 杀死可以收到 在红米上面杀死app收不到 这个有解么 ?
getui
-
华为推送
官方解答,和大家分享:
Emui3.0上,Push广播有很大概率被限制,如: Mate7 3.0版本,荣耀6plus,P7 3.0版本,4X, 4A等。
Emui3.1上,Push广播基本不被限制,但个别型号机型存在问题,如:荣耀5x等。
Emui4.0及以上,Push广播有较高概率被限制,不被限制的机型如:荣耀畅玩4C,荣耀畅玩4X,Mate S,P8 MAX等。
如广播被限制,需要将应用设为开机启动项。所以对于及时性或到达率要求非常高的应用,我们建议应用要考虑替代方案。
后续Push版本,华为将采用新的设计方案,解决被限制的问题,但发布计划待定。
要是允许自启动我还要你的推送做什么?
-
个推
官方的案例里有微博,说是可以共享通道,结果测试下来并没有用,官方的解答是
微博是定制版本的,他不能作为唤醒应用,试试。。。
不过其它案例的 App 确实可以共享通道,弹出通知消息,但是遇到华为上锁屏杀后台应用也是无解了
看来推送真是越来越困难了。如果不是非推送不可的关键业务功能,就尽量前台长链接吧。
在 2016年5月26日 下午6:18,wujun8 notifications@github.com写道:
华为推送
官方解答,和大家分享:
Emui3.0上,Push广播有很大概率被限制,如: Mate7 3.0版本,荣耀6plus,P7 3.0版本,4X, 4A等。
Emui3.1上,Push广播基本不被限制,但个别型号机型存在问题,如:荣耀5x等。
Emui4.0及以上,Push广播有较高概率被限制,不被限制的机型如:荣耀畅玩4C,荣耀畅玩4X,Mate S,P8 MAX等。
如广播被限制,需要将应用设为开机启动项。所以对于及时性或到达率要求非常高的应用,我们建议应用要考虑替代方案。
后续Push版本,华为将采用新的设计方案,解决被限制的问题,但发布计划待定。要是允许自启动我还要你的推送做什么?
个推
官方的案例里有微博,说是可以共享通道,结果测试下来并没有用,官方的解答是
微博是定制版本的,他不能作为唤醒应用,试试。。。
不过其它案例的 App 确实可以共享通道,弹出通知消息,但是遇到华为上锁屏杀后台应用也是无解了
—
You are receiving this because you were mentioned.
Reply to this email directly or view it on GitHub
#4 (comment)
此致
敬礼
张雄
我是一只小小小小小小小熊,怎么吃也吃也吃不饱!
华为手机锁屏就杀进程
小米是划杀后台进程,加入系统黑名单,无法拉起,小米push sdk也无法拉起,只能用户点击,才能拉起app主进程
小米对微信有特殊处理,我把我应用包名改成微信后,装了之后图标都给我换成微信了,划杀进程也还在
还有各种厂商手机,如后台就断网,杀进程,限制越来越严,基本也只有微信,qq,微博这种直接进白名单
我们做了一套开源推送系统,也是集成了小米,华为,apns推送,同时支持web端
https://github.com/xuduo/socket.io-push
如有兴趣使用/开发的,联系我,可以提供技术支持
对 phoneGap支持的哪个好点,用的ionic框架,看文档现在好像只有Jpush一家有现成的插件可以用
@xuduo 确实如此啊,在小米手机上跑了两个demo, com.tencent.mobileqq com.tencent.mm,图标都变成了qq和微信,然后各种后台运行的选项都是默认勾选的。
百度自己都不想用百度的
@michaelchucoder 用MQTT自己搭,不是也绕不过客户端APP进程被操作系统杀掉了,还是要调用官方或者什么推送来唤醒么?
使用小米推送ios,那叫一个坑爹,瘫痪一个月都没人管,�偶尔收到一条都不知道是猴年马月的推送了...