网易云IM(即时通讯) 登录指南(Android)
直接上干货 IM登录走起(简单没有多余操作)
大概流程
1.每一个用户必须有一个唯一的ID。
2.这个用户id需要在网易云服务器上注册一下(服务端进行操作)。
3.注册完网易云服务器会返回一个token给我们的服务器,服务器返在返回给你,就是你的登录密码,用户名就是你的id。(可以自定义)
4.直接登录,看返回状态。
5…网易云限制每一个手机号只能免费注册一个用户id。
6.手机号申请的key最多免费注册100用户,超出就不会登录成功。
这是我简单封装的一个登录、注销、主动登录工具类,
@SuppressWarnings("unchecked")
public class NimLoginManager {
static String TAG = "LoginManger-----";
static boolean loginFlag = false;
public static LoginInfo loginInfo() {
BCPreferences preferences = BCPreferences.getInstance();
// 从本地读取上次登录成功时保存的用户登录信息
if (TextUtils.isEmpty(preferences.getUserId())
|| TextUtils.isEmpty(preferences.getToken())) {
LogUtil.i("IM登录UserId:"+preferences.getUserId()+"IM登录token:"+preferences.getToken());
return null;
}
String id = preferences.getUserId();
String token = preferences.getToken();
//缓存id
DemoCache.setAccount(id);
LogUtil.i("IM登录UserId:"+id+"IM登录token:"+token);
return new LoginInfo(id, token);
}
/*登录*/
public static boolean doLogin(String account, String pwd) {
//这里传入的是你得当前账号id,和服务
LoginInfo info = new LoginInfo(account, pwd);
RequestCallback<LoginInfo> callback =
new RequestCallback<LoginInfo>() {
@Override
public void onSuccess(LoginInfo param) {
LogUtil.i("onSuccess-登录成功 用户:"+param.getAccount()+"--token:"+param.getToken());
loginFlag = true;
DataCacheManager.buildDataCache();
LogUtil.i(NIMClient.getStatus()+"---状态");
}
@Override
public void onFailed(int code) {
// 302 token 错误或者账号不存在都会导致 302 错误码。
// 408 1、连接建立成功,SDK 发出登录请求后网易云通信服务器一直
// 415 网络断开或者与网易云通信服务器建立连接失败 NET_BROKEN
// 416 请求过频错误,
// 417 一般由一端登录导致自动登录失败导致。
// 1000 登录成功之前,调用本地数据库相关接口(手动登录的情况下数据库未打开) UNLOGIN
LogUtil.i( "onFailed-登录失败" + code);
loginFlag = true;
}
@Override
public void onException(Throwable exception) {
LogUtil.i("onException-异常问题" + exception.getMessage());
loginFlag = true;
}
// 可以在此保存LoginInfo到本地,下次启动APP做自动登录用
};
NIMClient.getService(AuthService.class).login(info).setCallback(callback);
return loginFlag;
}
/*登出*/
public static void loginOut() {
NIMClient.getService(AuthService.class).logout();
}
/***
* 主动调用 避免IM掉线或者自动登录不成功,这里可以主动调用
* */
public static void login(){
String userId = BCPreferences.getInstance().getUserId();
String token = BCPreferences.getInstance().getToken();
if(userId!=null && token!=null){
doLogin(userId, token);
}
}
}