今天整理了下之前在项目中集成腾讯即时通讯的过程欢迎遇到各种问题的朋友来一起探讨
首先,申请帐号神马的就不说了,直接代码部分
在项目的Application类中,通过如下代码做一个初始化
TIMManager.getInstance().init(getApplicationContext());
context = getApplicationContext();
if(MsfSdkUtils.isMainProcess(this)) {
TIMManager.getInstance().setOfflinePushListener(new TIMOfflinePushListener() {
@Override
public void handleNotification(TIMOfflinePushNotification notification) {
if (notification.getGroupReceiveMsgOpt() == TIMGroupReceiveMessageOpt.ReceiveAndNotify){
//消息被设置为需要提醒
notification.doNotify(getApplicationContext(), R.drawable.ic_launcher);
}
}
});
}/**
* 登陆IMSDK
*/
public void loginSig(final Context context, String userSig, final String userName) {
//登录之前要初始化群和好友关系链缓存
FriendshipEvent.getInstance().init();
//初始化消息监听
MessageEvent.getInstance();
GroupEvent.getInstance().init();
TIMUser user = new TIMUser();
user.setIdentifier(userName);//userName用户名(id)
user.setAppIdAt3rd(Constant.SDK_APPID+"");//与AppId相同的字符串
user.setAccountType(Constant.ACCOUNT_TYPE+"");
//发起登录请求
TIMManager.getInstance().login(
Constant.SDK_APPID, //sdkAppId,由腾讯分配
user,
userSig,//用户帐号签名,由私钥加密获得,具体请参考文档
new TIMCallBack() {//回调接口
@Override
public void onSuccess() {//登录成功
Log.d("onSuccess", "onSuccess"+"1");
//初始化程序后台后消息推送
PushUtil.getInstance();
//初始化消息监听
MessageEvent.getInstance();
String deviceMan = android.os.Build.MANUFACTURER;
// MiPushClient.clearNotification(getApplicationContext());
Intent intent = new Intent(LoginActivity.this, MainTab.class);
startActivity(intent);
finish();
}
@Override
public void onError(int code, String desc) {//登录失败
Log.d("onError", code+":"+desc);
switch (code) {
case 6208:
//离线状态下被其他终端踢下线
NotifyDialog dialog = new NotifyDialog();
dialog.show(getString(R.string.kick_logout), getSupportFragmentManager(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
navToHome();
}
});
break;
case 6200:
Toast.makeText(context,getString(R.string.login_error_timeout),Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(context,getString(R.string.login_error),Toast.LENGTH_SHORT).show();
break;
}
}
});
}// 互踢下线逻辑
TIMManager.getInstance().setUserStatusListener(
new TIMUserStatusListener() {
@Override
public void onForceOffline() {
Log.d(TAG, "receive force offline message");
Intent intent = new Intent(MainTab.this,
DialogActivity.class);
startActivity(intent);
}
@Override
public void onUserSigExpired() {
// 票据过期,需要重新登录
new NotifyDialog().show(getString(R.string.tls_expire),
getSupportFragmentManager(),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
logout();
}
});
}
});
在登录的地方,腾讯即时通讯这边分了自有帐号,腾讯帐号以及混合这三种方式,然后我这边项目使用的是自有帐号,自有帐号的话切记一定要先在后台那边把所有自己的帐号全部导入到腾讯服务器,导入方法以及不同平台使用的代码见api 以下是登录所使用的接口
其中usersig是后台调用腾讯接口生成的字符串,需要后台返回给你,APPID与TYPE在申请腾讯帐号的时候会有
在这里,我遇到过一个问题,当时测试这个接口的时候没注意,所用帐号没有传入腾讯服务器,导致一直失败,所以各位朋友切记,一定要先把帐号导入,如果只是先用于测试的话,腾讯那边有专门的测试接口,可以通过测试接口把测试用的帐号传入即可
到了这里基本上就是接入成功了,可以使用后续的各种功能了
进入你的主界面的时候,通过下面这段代码,保证同一时间同一帐号只有一个地方登录
完成这些基本就接入成功了,后续功能可以直接使用api上的接口进行调用即可
另外,腾讯很多功能并没有开放给我们,比如说新建群之后要搜索这些,都是需要自己提交工单进行搜索的,同时,有些功能需要添加也可以自己提交工单,腾讯这一块在用户量没达到一定程度之前是免费的