腾讯IM被踢下线有两个场景一个是在线的时候被踢,另一个就是不在线的时候被踢了,然后登录的时候报了被踢的错误码,之前就遇到了离线被踢的坑。
设置被踢监听:
TIMUserConfig userConfig = new TIMUserConfig();
userConfig.setUserStatusListener(new TIMUserStatusListener() {
@Override
public void onForceOffline() {
//被踢的时候该方法会被执行
}
@Override
public void onUserSigExpired() {
}
})
IM登录
public void login(String identifier,String userSig,TIMCallBack callback) {
TIMManager.getInstance().login(identifier,userSig,callback);
}
public interface TIMCallBack {
void onError(int var1, String var2);
void onSuccess();
}
如果登录失败会有一个6208(离线状态下被其他终端踢下线)的错误码,神奇的是如果你离线被踢了,然后登录的时候会走这个onError回调,如果你在onError里对6208做了处理同时也在onForceOffline做了处理的话,比如弹出dialog,这样的话两个方法都会被执行。
@Override
public void initLoginError(int code) {
switch (code) {
//离线状态下被其他终端踢下线(这里不需要做处理,因为在MyApplication里已经做了互踢监听了)
case 6208:
break;
case 6200:
//当前没有网络
showLoginMsg(getResources().getString(R.string.network_not));
break;
default:
//其他失败情况
showLoginMsg(getResources().getString(R.string.login_error));
break;
}
}
我在这里对6208错误码不作处理,因为此时onForceOffline方法也会被执行,而onForceOffline我已经做了处理。之前发现离线被踢会弹出两个dialog,后来才知道原来这两个方法都会被执行,所以弹了两次dialog。