-
创建时间
21年1月15日
-
最后回复
21年1月15日
- 3
回复
- 55
浏览
- 2
用户
- 1
链接
21-01-15
你这是在 Android 环境里,还是在纯 java 环境下遇到的问题?
在 Android 环境下,我们是通过一个后台服务来保持客户端与即时通讯云端的长链接的,但是从 Android 8.0 之后系统收紧了权限,会很快中止进入后台的应用的所有后台网络活动(也就是切断所有网络连接),这样就会导致即时通讯 SDK 依赖的网络连接中断。我们的 SDK 会在网络恢复的时候尝试自动重建连接,但是这需要一定的时间,应用层可以通过 AVIMClientEventHandler 接口来监听网络状态变化,具体可参考文档: https://leancloud.cn/docs/realtime-guide-beginner.html#hash262557401
对于 Android 应用来说,网络的变化是非常常见的,开发者要注意监听这些状态变化,不能假定网络是一直可用的。
21-01-15
java 后台服务与leancloud长连接断开 与 AVIMClient 的连接状态断开 是等价的。
21-01-15
AVOSCloud.setRegion(AVOSCloud.REGION.EastChina);
AVOSCloud.setLogLevel(AVLogger.Level.DEBUG);
AVOSCloud.initialize(this.appId, this.appKey);
AVIMOptions.getGlobalOptions().setTimeoutInSecs(30);
AVConnectionManager manager = AVConnectionManager.getInstance();
manager.autoConnection();
manager.startConnection(new AVCallback() {
@Override
protected void internalDone0(Object o, AVException e) {
if (e == null) {
log.info("成功建立 WebSocket 链接");
} else {
log.info("建立 WebSocket 链接失败:" + e.getMessage());
}
}
});
AVIMClient.setClientEventHandler(ZxbClientEventHandler.getInstance());
AVIMMessageManager.setConversationEventHandler(new ZxbIntelConversationEventHandler());
AVIMMessageManager.registerDefaultMessageHandler(new ZxbIntelMessageHandler());
AVIMOptions.getGlobalOptions().setMessageQueryCacheEnabled(false);
-------------------------------handler 如下所示--------------------------------
package com.zbintel.zxb.service.imms.biz.handler;
import cn.leancloud.im.v2.AVIMClient;
import cn.leancloud.im.v2.AVIMClientEventHandler;
public class ZxbClientEventHandler extends AVIMClientEventHandler {
private static ZxbClientEventHandler eventHandler;
public static synchronized ZxbClientEventHandler getInstance() {
if (null == eventHandler) {
eventHandler = new ZxbClientEventHandler();
}
return eventHandler;
}
private ZxbClientEventHandler() {
}
private volatile boolean connect = false;
/**
* 是否连上聊天服务
*
* @return
*/
public boolean isConnect() {
return connect;
}
@Override
public void onConnectionPaused(AVIMClient avimClient) {
System.out.println("下线"+avimClient.getClientId());
}
@Override
public void onConnectionResume(AVIMClient avimClient) {
System.out.println("上线"+avimClient.getClientId());
}
@Override
public void onClientOffline(AVIMClient avimClient, int i) {
System.out.println("下线"+avimClient.getClientId());
}
}
您好,我还有一个问题请教一下。我是纯JAVA环境。初始化方法如上所示,网络断开的时候可以接收到onConnectionPaused()方法的回调请求。然后我恢复网络,等了几分钟,一直没有接收到onConnectionResume()方法的回调。 麻烦看一下我的初始化代码是否存在问题。
