找到原因了,已解决
https://leancloud.cn/docs/realtime_guide-android.html#自身主动加入5
这个地方容易使人产生误解
AVIMMessageManager.setConversationEventHandler(new CustomConversationEventHandler());
AVIMClient bob = AVIMClient.getInstance("Bob");
bob.open(new AVIMClientCallback(){
@Override
public void done(AVIMClient client,AVIMException e){
if(e==null){
//登录成功
}
}
});
实际开发中,open 一个客户端往往是在初始化 LeanCloud 相关配置之后执行的,如果把 AVIMMessageManager.setConversationEventHandler(new CustomConversationEventHandler()); 和 open 客户端的逻辑放在一起,会造成离线消息回调未及时执行
正确的做法应该是放在 LeanCloud 相关配置的逻辑里面,这段逻辑在 Android 里,应该是放在 Application1 类里,我的 Application
类名字是 App.java
, 示例代码如下
private void initLeanCloud() {
AVOSCloud.initialize(App.this, Constants.APP_ID, Constants.APP_KEY);
// 接收离线消息回调
AVIMClient.setOfflineMessagePush(true);
AVIMMessageManager.setConversationEventHandler(new CustomConversationEventHandler());
AVIMMessageManager.registerDefaultMessageHandler(new DefaultMessageHandler(this));
}