融云即时通讯SDK集成 -- 国内厂商推送集成踩坑篇(Android平台)
背景:
最近公司新上的app要加上即时通讯的功能, 自己快速实现一个当然是不可能的了(项目deadline也顶不住哇).就从各家成熟的SDK厂商选来选去的, 各有各的好也各有各的不足.最后点兵点将,选了融云家的SDK(老板说了算hhhh).
他家的官网和文档地址:
官网:https://www.rongcloud.cn/
文档:https://docs.rongcloud.cn/v4
这个任务当然还是落在我的头上. 基础的IM聊天, 群组聊天等功能集成在另一篇博客中已经讲过, 这里就先不说了. 这篇文章的重点我打算好好讲讲接入三方厂商推送时踩的那些坑, 以便给后续入融云坑的朋友们避避雷.
1. 为什么要再接入厂商推送?
集成了即时通讯的SDK, 我们的app不就能拥有像微信一样随时随地收到消息的即时通讯能力了? 说实话我一开始也是这么认为的. 可惜做开发也要按基本法来, Android平台回收app的这一关咱都过不了, app都给你杀死得透透的了你拿啥收消息呢? 咱又不是微信hhhh. 所以一番急赤白脸地阅读他家文档之后, 才发现app如果活着, 他融云能用自己的通道给你把消息推送到. 如果app被杀死了, 这个消息就在他家的服务端直接交给三方厂商了(也就是五大厂商蓝绿大厂华为小米FCM), 让这条消息走人家厂商的推送通道给送到你手机上.
2. 融云家SDK接入厂商推送指南
这个他家讲的挺清楚了, 都近似手把手的教了, 那我也就不在这浪费键盘寿命了(偷个懒hhhhh).给他家官方文档往这儿一贴好了: https://docs.rongcloud.cn/v4/views/im/ui/guide/private/notify/push/mi.html. 大家注意一下他家有些厂商推送的文档分2.x和4.x哈, 对应的是他家旧版/新版SDK中接入的厂商的新/旧版本推送包.
3. 数数我踩过的坑
在他家这儿还是踩了不少坑的...淦,感觉他家文档虽然细致吧, 但是坑还是不少的. 还好能提工单让他家技术支持老哥解决问题(老哥还是挺热心的, 建个技术支持群太贵了整不起啊老板抠门...), 所以大家要是踩上实在摆不平的坑, 赶紧给他提工单就完事了.
以下这些坑如果你还没开始入坑, 就不用看的太仔细了,因为有些类/方法你没接入也不知道, 随便看看心里有个数就行. 一旦遇上坑赶紧来这ctrl+F 一波看看有没有你遇到的, 别浪费时间.
3.1 华为
1. 华为旧版本推送的坑
这第一个我要说的坑是真的坑, 是华为的锅hhhhh, 这个折腾了我好两三天. 跟他家的技术支持反复的确认. 老哥也是热心, 陪我折腾到底, (我给他家提工单, 老哥给华为提工单, 哈哈哈). 融云他家的SDK的大版本分为旧版本和新版本的, 一个叫2.x一个叫4.x. (3.x跑哪了我也不知道hhhh). 他家2.x的SDK接入的是华为的旧推送包. 4.x的SDK更新比较大, 索性就接入了华为新推送包了. 我一开始用的他家2.x的SDK.
先公布结果哈: 一堆急赤白脸的集成, 完后发现华为EMUI 10以上推送都好使, 10以下的推送都不好使了. 好嘛, 一堆工单下来, 发现华为的旧推送包华为已经不维护. 要么, 升级EMUI 10以下手机的HMS core, 要么就升级华为推送包. 这下好, 我又得把融云的SDK给升级到4.x了. 所以接入融云家2.x SDK的朋友们注意了, 这儿是个大坑哈.
2. 华为推送自定义铃声问题
app第二版有个需求, 要让推送来的消息用我们自定义的铃声(放在app里的资源文件)做提醒. 这个我也是尝试了好久一直做不到完全OK, 时灵时不灵的, 有时候是自定义铃声, 有时候又是系统默认铃声了. 又是缠着处理工单的技术支持老哥一直聊这个问题hhhh. 结果最后确认是华为的消息优先级有高低之分(优先级高). 移动端设置的消息为高优先级不算数, 最终优先级由华为平台和移动端设置共同决定, 二者取低. 我在移动端是把每条消息都设置为高了, 奈何平台把一部分消息优先级判别为低优先级了. 最后需要和华为发邮件申请把消息优先级都设置成高的就OK了.
3.2 Vivo
Vivo现在最大的问题是, Vivo平台分为测试消息和正式消息. Vivo测试环境下只能用测试消息做推送来测试. 但是融云家服务端推送出来的都是正式消息, 所以这就成了一个死结. 正式消息只能正式环境发, 但是测试环境没测通怎么上线正式环境呢... 融云家已经在修改了, 估计下一版就能传参数选择是发测试消息还是正式消息了
3.3 Oppo
接入Oppo风平浪静一切顺利... 倒是没有什么坑
3.4 小米
接入小米风平浪静一切顺利... 倒是没有什么坑