
IM即时通讯
安全可靠、全球互通

实时音视频
流畅稳定、省钱省力
回答:
具体可看 https://support.rongcloud.cn/ks/ODc4
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://www.rongcloud.cn/docs/android.html#user_info
/** * <p> * 设置用户信息的提供者,供 RongIM 调用获取用户名称和头像信息。 * 设置后,当 sdk 界面展示用户信息时,会回调 {@link io.rong.imkit.RongIM.UserInfoProvider#getUserInfo(String)} * 使用者只需要根据对应的 userId 提供对应的用户信息。 * 如果需要异步从服务器获取用户信息,使用者可以在此方法中发起异步请求,然后返回 null 信息。 * 在异步请求结果返回后,根据返回的结果调用 {@link #refreshUserInfoCache(UserInfo)} 刷新用户信息。 * </p> * * @param userInfoProvider 用户信息提供者 {@link io.rong.imkit.RongIM.UserInfoProvider}。 * @param isCacheUserInfo 设置是否由 IMKit 来缓存用户信息。<br> * 如果 App 提供的 UserInfoProvider。 * 每次都需要通过网络请求用户数据,而不是将用户数据缓存到本地,会影响用户信息的加载速度;<br> * 此时最好将本参数设置为 true,由 IMKit 来缓存用户信息。 */ public static void setUserInfoProvider(UserInfoProvider userInfoProvider, boolean isCacheUserInfo)
SDK 会在须展示用户信息时回调 getUserInfo,如果接收端之前从未收到过发送端的消息,那么很可能缓存中没有发送端的用户信息,如果此时恰好处在后台,接收到发送端发来的消息就不会弹通知,目前机制如此。
排查时可以先看日志中有没有“onReceiveMessageFromApp. conversationType:”打印出来,如果有打印接着在 RongNotificationManager 类中跟踪 onReceiveMessageFromApp(Message message, int left) 这个方法,确认是否是由于 targetName 为空导致未触发 sendNotification。
10. 是否设置了自定义广播接收器(2.9.19版本之后检查点)
可以参考连接
5.X版本:https://doc.rongcloud.cn/im/Android/5.X/ui/notification/customize
4.X版本:https://doc.rongcloud.cn/im/Android/4.X/ui/guide/notify/notify/android#customshow
如果排除以上情况还无法,请您推出或卸载应用重新安装。 然后获取从应用第一次打开(融云 SDK初始化)到发送消息无法没有展示通知的操作的整个过程的完整 log, 注意不要过滤。 以便于我们工程师分析定位原因。