融云即时通讯SDK集成 – 通知检查

背景:

最近公司新上的app要加上即时通讯的功能, 自己快速实现一个当然是不可能的了(项目deadline也顶不住哇).就从各家成熟的SDK厂商选来选去的, 各有各的好也各有各的不足.最后点兵点将,选了融云家的SDK(老板说了算hhhh).
他家的官网和文档地址:
官网:https://www.rongcloud.cn/
文档:https://docs.rongcloud.cn/v4
这个任务当然还是落在我的头上. 集成完毕后, 也踩了不少坑. 所以这篇文章给大家总结下排查融云消息的本地通知和远端推送的办法. 希望可以帮助到正在看这篇文章的你.

什么是本地通知:

当我的App接入了融云的即时通讯sdk后, 便拥有了即时通讯的能力. sdk与融云服务器建立长连接, 当消息发出后, 先走到融云的服务器, 再转发给相应的用户. 这里移动端到服务端, 服务端到移动端, 走的通道都是长连接. 无论你的app是在前台还是在后台, 只要没有被杀死, 那么长连接是一直在的. 所以消息可以即时的发送到达给接收者. 融云把这种走长连接到达的消息, 在通知栏展示的通知叫做本地通知. 也就是消息是顺利发送到接收者端了, 逻辑可以走到消息接收监听那里. 融云sdk内部实现了消息到达后的本地通知, 也赋予了开发者自行实现消息到达后进行本地通知的权利.

本地通知的检查:

这里我总结了一下接入融云sdk后, 关于本地通知接收不顺利的排查. 大致可以分为这么几条:

1.是否设置了 setOnReceiveMessageListener 监听, 并且 onReceived 方法返回的为 true。

RongIM.setOnReceiveMessageListener(new RongIMClient.OnReceiveMessageListener() {@Overridepublic boolean onReceived(Message message, return true;}});

如果 onReceived 方法返回值为 true 则是监听做了拦截, 则不会走通知逻辑。 2.发送的消息是否是自定义消息。 如果是自定义消息, 则请查看自定义消息的 MessageTag 的注解是否设置了 flag 的值为 MessageTag.ISCOUNTED 或 MessageTag.ISPERSISTED) 。 以下面为例。

@MessageTag(value = "RC:TxtMsg", flag = MessageTag.ISCOUNTED)@DestructionTagpublic class TextMessage extends MessageContent {...}

如果没有设置其中之一,则不会走通知逻辑。

3.是否设置消息拦截器

设置代码如下:

 /*** 设置接收消息时的拦截器** @param messageInterceptor 拦截器*/public void setMessageInterceptor(new RongIM.getInstance().MessageInterceptor() {@Overridepublic boolean intercept(final Message message) {return true;}});

如果设置了消息拦截器, 并且在 intercept() 方法中返回 true, 表示拦截此消息。 则不会走通知逻辑。

4.检查接收到的消息的 senderUserId 是否和当前用户的 id 相同。
如果 id 相同, 则不会走通知逻辑。 自己不可发给自己。

5.查看当前接收的消息是否是属于聊天室会话类型的
聊天室的消息目前不支持本地通知。

6.如果是自定义消息,请检查是否设置了自定义消息的 MessageProvider 。
如果没有,则不会走通知逻辑。

7.接收方本地是否有接收方的用户信息。 如果没有设置, 则不会走通知逻辑。

8.检查应用权限设置,看是否打开应用信任权限, 通知栏权限或者声音提示权限等。如果没有打开,请打开再试。

9.接收方没有发送方的用户信息,接收端不弹通知。用户信息通过用户信息提供者方式获取。
参考链接:https://docs.rongcloud.cn/v3/views/im/ui/guide/private/user/set/android.html

什么是远端推送:

集成了即时通讯的SDK, 我们的app不就能拥有像微信一样随时随地收到消息的即时通讯能力了? 说实话我一开始也是这么认为的. 可惜做开发也要按基本法来, Android平台回收app的这一关咱都过不了, app都给你杀死得透透的了你拿啥收消息呢? 咱又不是微信hhhh. 所以一番急赤白脸地阅读他家文档之后, 才发现app如果活着, 他融云能用自己的通道给你把消息推送到. 如果app被杀死了, 这个消息就在他家的服务端直接交给三方厂商了(也就是五大厂商蓝绿大厂华为小米FCM), 让这条消息走人家厂商的推送通道给送到你手机上.

远端推送的检查:

这里我总结了一下接入融云sdk后, 关于本地通知接收不顺利的排查. 大致可以分为这么几条:

  1. 退出应用的时候,只能调用融云的 disconnect() 方法,而不是 logout()。这样退出后融云才会启动push进程。

  2. push 进程的名字不能更改,必须是默认的名字,既 io.rong.push.
    (2.6.0dev之后的版本,此进程名字可以修改)

  3. 通过 ddms 或者终端里敲入 adb shell ps|grep rong 查看终端里是否存在 io.rong.push 这个进程。

有些手机厂家做了特殊限制,不允许第三方后台进程启动,所以融云的后台进程起不来,导致收不到 push 消息。这种情况可以换个手机测试(如三星,大部分三星手机没有做权限限制)。另外大部分国产手机,有权限设置的菜单,比如小米,华为等,可以手动去安全中心,设置应用的自启动权限,后台运行权限等,就可以收到Push消息了。

不过 vivo 和 oppo 有些型号的手机,一旦应用退到后台,系统会很快把它杀死,这种没有办法解决。目前市面上所有推送都存在这个问题,除非系统把该应用加入白名单。

  1. push 进程存在,仍然收不到 push 消息。

如果你的应用有消息免打扰功能,那么请确认当前登录账号之前是否设置过消息免打扰。如果不太确定,那最好去你的应用设定里重新设置下消息免打扰时间。 这里要注意的是: 如果这个账号之前在别的手机上设置过消息免打扰,换一台手机登录或者卸载重装的时候,融云服务端记录的仍然是之前设置的消息免打扰状态,所以这种情况下是收不到push消息的。

融云即时通讯SDK集成 – 通知检查相关推荐

  1. 融云即时通讯SDK集成 – 定制UI(二) ——添加自定义表情库

    融云即时通讯SDK集成 – 定制UI(二) --添加自定义表情库 背景: 最近公司新上的app要加上即时通讯的功能, 自己快速实现一个当然是不可能的了(项目deadline也顶不住哇).就从各家成熟的 ...

  2. 融云即时通讯SDK集成 -- 定制UI(二) ——添加自定义表情库

    背景: 最近公司新上的app要加上即时通讯的功能, 自己快速实现一个当然是不可能的了(项目deadline也顶不住哇).就从各家成熟的SDK厂商选来选去的, 各有各的好也各有各的不足.最后点兵点将,选 ...

  3. iOS:融云即时通讯快速集成

    一.介绍 即时通讯在众多社交软件.生活软件以及教育软件中已经是必备的功能了,在当前国内,即时通讯SDK做的比较不错的有那么几家,例如环信SDK.融云SDK...,这两家做的都很不错,各有千秋吧,要是真 ...

  4. iOS开发融云即时通讯集成详细步骤

    1.融云即时通讯iOS SDK下载地址   http://rongcloud.cn/downloads  选择iOS   SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注 ...

  5. 融云即时通讯云平台获北京六局委新技术新产品认证

    近日,融云即时通讯云平台成功入选第七批北京市新技术新产品(服务)认证,成为本批次中即时通讯行业唯一入选企业.该证书是由北京市科学技术委员会.北京市发展改革委员会.北京市经济和信息化委员会.北京市住房和 ...

  6. 融云聊天 php_thinkphp整合系列之融云即时通讯在线聊天

    随着技术的发展:现代的网站:越来越趋于应用形式了: 不再是像以前那样需要用户刷新页面:获取数据了: 服务器端可以主动向用户推送数据:更加及时性了: 比较突出的就是即时通讯在线聊天: 今个:我们要打造的 ...

  7. thinkphp整合系列之融云即时通讯在线聊天

    随着技术的发展:现代的网站:越来越趋于应用形式了: 不再是像以前那样需要用户刷新页面:获取数据了: 服务器端可以主动向用户推送数据:更加及时性了: 比较突出的就是即时通讯在线聊天: 今个:我们要打造的 ...

  8. 对接融云即时通讯组件SDK,轻松实现App聊天室

    我好像特别喜欢做聊天室类的东东,刚折腾完微软的SignalR又折腾App.本来想研究研究XMPP的,由于服务器的搭建问题,先采用一个第三方的吧,看看效果如何.听到弟弟说他们公司用到了融云,我也下载个S ...

  9. iOS集成融云即时通讯详细教程

    相关集成方法也可以直接参考官方文档http://www.rongcloud.cn/docs/ios.html.下面是我集成过程中的一些详细步骤. 1.准备工作:到官网http://www.rongcl ...

  10. 项目中集成融云即时通讯

    http://blog.csdn.net/qq_28759359/article/details/52689948 项目中集成融云IM,能够单聊,离线能够收到消息,有聊天列表. 一我使用的是融云. I ...

最新文章

  1. 一个简单的第三方CNN自编码matlab工具箱
  2. 牛客题霸 NC27 集合的所有子集
  3. Windows7 beta1 微软官方下载
  4. 随想录(内存屏障示例代码)
  5. 【白皮书分享】2021消费者数智化运营白皮书.pdf(附下载链接)
  6. 机器学习与python实战(一)-k近邻
  7. 蚂蚁金服双 11 大促全面揭秘:百万支付、容器化和平台智能化
  8. 用FileInputStream和FileOutPutStream读写文件
  9. DELL ALIEN外星人笔记本安装UBUNTU,卡死的解决办法
  10. Python-Socket-Programming(1)
  11. 全国计算机等级考试一级模拟考,全国计算机等级考试一级模拟试题一
  12. 淘宝618超级喵运会怎么玩?超级喵运会整体活动攻略来了
  13. The7主题安装教程Wordpress
  14. DDOS攻击是什么意思?日本奥运官网遭逾4亿次网络攻击
  15. 2018计算机专硕学硕,2018年专硕和学硕的初试和复试的区别?
  16. 剑指offer:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
  17. dparsf是什么_老师,我用DPARSF做Slice Timeing时老报错,请问您是什么原因呢?
  18. 【Mathematica】 最小二乘法
  19. EventBus使用之基础
  20. 【千里之行,始于足下】大数据高频面试题——Hive篇(一)

热门文章

  1. 汉化 工具 批量 自动化 批处理
  2. 二进制与十六进制的转换
  3. AspNetPager 分页的详细用法(ASP.NET)
  4. dnf最新地图编号2020_《DNF》2020搬砖地图有哪些
  5. 一个骨灰级塞班开发者的自白
  6. 大数据读书——《淘宝技术这十年》读书笔记
  7. 计算机科学技术学报官网convex,计算机学报chin
  8. FileSplit cannot be cast Exception
  9. 防火墙资源(jetio,comodo,outpost,pc tool,zonealarm pro
  10. JDK1.8的lib相关jar