乐趣区

关于即时通讯:融云即时通讯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() {
@Override
public boolean onReceived(Message message,
return true;
}
});

如果 onReceived 办法返回值为 true 则是监听做了拦挡,则不会走告诉逻辑。2. 发送的音讯是否是自定义音讯。如果是自定义音讯,则请查看自定义音讯的 MessageTag 的注解是否设置了 flag 的值为 MessageTag.ISCOUNTED 或 MessageTag.ISPERSISTED)。以上面为例。

@MessageTag(value = “RC:TxtMsg”, flag = MessageTag.ISCOUNTED)
@DestructionTag
public class TextMessage extends MessageContent {

}

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

3. 是否设置音讯拦截器

设置代码如下:

/**

  • 设置接管音讯时的拦截器

*

  • @param messageInterceptor 拦截器

*/
public void setMessageInterceptor(new RongIM.getInstance().MessageInterceptor() {
@Override
public 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 音讯的。

退出移动版