前言
React Native现在是越来越火,一套代码同时构建iOS、Android两种应用真的是太爽了,而且有了ES6和React的加成开发效率出奇的高。 虽然坑奇多无比但是还是阻挡不了市场对它的热爱。但是使用React Native也并非总是那么舒服,尤其涉及到需要用objective-c或者java实现某些原生功能的时候,让广大前端出生没有原生App开发经验的同学们苦不堪言,但是没有办法,硬着头皮写下去总比丢工作强。所以React Native开发者们真的是痛并快乐着,爽并纠结着。然而能力就是在这个过程中快速提高的,所以大家加油,现在只不过是黎明前的黑暗!
今天要分享的是我在React Native开发过程中征服的一个小小领域:消息推送。
其实做手机App就绕不开消息推送,没有消息推送的App就像一个没有漂亮前台的公司(就像我们公司,嘿嘿),让人没有进去看看的欲望。。怎么可能火呢。
说正经的,虽然我做完React Native版的消息推送之后发现其实也并不难,但是一路上踩过大大小小的坑、尝试过无数的解决方案,到最终大功告成还是有点小成就感的(笨人获得满足感相对比较容易)。实现React Native App的消息推送可预见的难点在于:
- 在众多的第三方推送服务提供商中选择哪一个最合适
- 需要同时实现Android和IOS两个系统的推送,需要对两个系统的推送机制都非常熟悉
- 哪些部分需要用原生实现,哪些需要用js实现,如何实现桥接
- 如何实现App在后台或者关闭(inactive)状态下的推送,又如何实现App打开(active)状态下的消息推送
结下来我就针对以上的难点,并结合实际的项目来详细分析如何实现消息推送。
选择服务提供商
市场上的推送服务提供商有很多,比如友盟、极光推送、Leancloud、个推、环信、融云等等。这么多的选择我们不可能都用过,所以应该从哪些方面去考量呢?
- 首先,必须支持React Native。为了验证这些第三方服务是否支持React Native,没有特别好的办法,我只能一个个的看他们的官网文档。如果文档里面都没有提到React Native那么果断放弃(有些厂商都不提供文档搜索功能,那也不建议选择,以后出问题都不好找)。
- 推送服务要稳定、可靠、快速,这一点不太好判断,因为大家都说自己可靠快速,所以需要实际使用后才能判断。
- 文档完善、清晰、准确、更新及时,能提供官方的React Native推送Demo。
- 价格合理(我们还是要想办法为公司省点钱滴)。
下面是我整理的一些主流的推送服务提供商的对比,可能不是那么完善和客观,欢迎纠错,没有提到的厂商不好意思啦。。
服务商 | React Native支持否 | 文档质量 | 官方Demo | 价格 |
---|---|---|---|---|
友盟 | 是 | 差,放弃 | 未调查 | 未调查 |
极光 | 是 | 缺少 | Demo | 价格 |
Leancloud | 是 | 高 | iOS | 价格 |
腾讯信鸽 | 否(未找到相关文档) | / | / | / |
阿里云推送 | 否(未找到相关文档) | / | / | / |
百度云推送 | 否(未找到相关文档) | / | / | / |
网易云信 | 是 | 缺少 | Demo | 价格 |
云巴 | 否(未找到相关文档) | / | / | / |
个推 | 是 | 缺少 | Demo | 价格 |
环信 | 否(只支持IM) | / | / | / |
融云 | 否(未找到相关文档) | / | / | / |
以上所有的厂商里面只有4家是支持React Native消息推送的,BAT跟商量好了似的都不支持,难道集体看衰React Native吗?在仅有的4家厂商中,文档方面只有Leancloud一家是我觉得文档质量比较好的,其他厂商都缺少接入React Native的相关文档。个推只有一个小Demo,而且Demo的文档也很简陋,所以先排除。极光的Demo应该是做的最好的,star数最多,Demo文档看起来也写的挺好的,虽然没有明码标价,但是免费版貌似就够用了,推送次数没有上限,二十万条/秒的推送速度也够用了,做一般应用应该足够了。网易的Demo看起来也挺完善,文档也说的过去,关键是价格太贵啦,商用版1800/月。。为了只做一个推送不值得,放弃!最后Leancloud是我个人比较喜欢的,因为之前有项目用到过,不管是文档、SDK的易用性、服务的可靠性和速度还是网站的审美都可以算得上同行中的佼佼者,而且商用版30/天的价格也可以接收(30/天包含了除推送外其他更多的功能和服务)。所以总结下来,只有极光推送和Leancloud值得一用(欢迎极光和Leancloud联系我打赏,嘿嘿),由于我的个人偏好,最终选择了使用Leancloud。
消息推送概念普及
我们在实现具体项目之前还是有必要了解一下消息推送的相应机制和基本概念的,这里我就不赘述了,欢迎阅读Leancloud的 消息推送服务总览。
接入Leancloud
首先我们创建一个React Native项目(本文Demo地址):
react-native init LeancloudPushDemo
并在Leancloud创建一个同名应用,开发版就好: