Android引入腾讯im即时通信
一、运行官方demo遇到的问题?
在运行官方demo时,可能出现提示某个插件不存在,而大概率时因为整个demo中,并没有使用到该插件;
1、当第一次进入时,demo很大可能性,会引入企业版的依赖,但是,项目中并不存在;
当你正常运行项目时,可能会报如下错误;2、 解决办法
2.1:如果第一次进来加载entetprise的时候,把它x掉
2.2:在build.app时,改为如下,并不直接依赖com.5.1.1
api ‘com.tencent.liteav:LiteAVSDK_TRTC:latest.release’
implementation project(’:tuikit’)
implementation project(’:tuikit-live’)
二、腾讯im使用步骤
1.引入依赖库
1.1:android建议引入含ui板块的依赖,可以省时省力
implemetion com.tencent.imsdk:tuikit:5.1.2
2.与腾讯im鉴权并生成聊天列表
2.1:在自己的逻辑中,拿到userid,并请求后端的生成userSing的接口;拿到 userSig;
2.2:该用户开始登陆
TUIKit.login(userId, userSig, new IUIKitCallBack() {
@Override
public void onSuccess(Object data) {
System.out.println("登陆成功");
}
@Override
public void onError(String module, int errCode, String errMsg) {
Log.i(TAG, "imLogin errorCode = " + errCode + ", errorInfo = " + errMsg);
}
});
2.3:登陆成功后;首先生成聊天列表;前提时,你有聊天记录
2.3.1:页面布局:
<com.tencent.qcloud.tim.uikit.modules.conversation.ConversationLayout
android:id="@+id/conversation_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"
android:focusable="false" />
根据你的页面类型,activity或者fragment;类似findviewbyId
baseview.conversationLayout.initDefault();
2.3.3:聊天某一项的监听,可以复制demo;如**置顶聊天或者删除聊天**
3、聊天
3.1:聊天界面布局:
<com.tencent.qcloud.tim.uikit.modules.chat.ChatLayout
android:id="@+id/chat_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
3.2:聊天逻辑
private ChatInfo mChatInfo;
mChatInfo = new ChatInfo();
//对方与腾讯im鉴权的字段
mChatInfo.setId(userId);
//聊天类型:单聊或者群组
mChatInfo.setType(V2TIMConversation.V2TIM_C2C);
//聊天标题:可以自己根据自己实际运用来
mChatInfo.setChatName(title);
//需要聊天的基本信息
ChianBinding.chatLayout.setChatInfo(mChatInfo);
//获取聊天文件后,进行默认ui和交互初始化
ChianBinding.chatLayout.initDefault();
3.3、到这里为止,你已经可以实现聊天与查看聊天列表了;
3.3.1:其实在腾讯demo的逻辑中,并不存在好友或者非好友的情况,两者均可以聊天,但是,需要你在管理后台配置;打开允许非好友聊天;
3.3.2:在聊天中,可能会出现在聊天记录中出现转圈圈的情况,其实,这个问题出现在,你并没有拿到对方在腾讯im中请求网络生成usersing的字段,也就是上方的userid;
4、遇到的问题
4.1:聊天记录时而存在时而消失
解决办法:
4.1.1:在你需要的模块,进行登陆鉴权,首先做是否登陆的判断
private void getConversionList() {
int i = V2TIMManager.getInstance().getLoginStatus();
if (i == V2TIM_STATUS_LOGINED) {
System.out.println("已登录");
LogInAgain(userId);
}
if (i == V2TIM_STATUS_LOGINING) {
System.out.println("登录中");
}
if (i == V2TIM_STATUS_LOGOUT) {
System.out.println("无登录");
IMLOGING(userId);
}
}
4.1.2 :如果已经登陆
/**
* 直接登陆,无需校验;避免重复登陆
*
* @param user
*/
private void LogInAgain(String user) {
TIMManager.getInstance().autoLogin(user, new TIMCallBack() {
@Override
public void onError(int code, String desc) {
}
@Override
public void onSuccess() {
System.out.println("二次登陆成功");
}
});
}
4.1.2:如果是未登陆状态
private void creatCommuntionList(String userSig) {
TUIKit.login(userId, userSig, new IUIKitCallBack() {
@Override
public void onSuccess(Object data) {
System.out.println("律师端登陆成功");
getCommuntation();
}
@Override
public void onError(String module, int errCode, String errMsg) {
Log.i(TAG, "imLogin errorCode = " + errCode + ", errorInfo = " + errMsg);
}
});
}
4.1.3:为什么上一步有getCommuntation()方法,原因时,聊天监听无响应,建议在activity处理逻辑如下:也就是在你初始化页面时,不需要在单独初始化聊天界面,直接在getCommuntation()方法中完成初始化,聊天,删除、置顶等一系列操作
//聊天记录列表
CommunicationBinding.conversationLayout.getTitleBar().setVisibility(View.GONE);
CommunicationBinding.conversationLayout.initDefault();
//这个也是删除、置顶操作
initPopMenuAction();
CommunicationBinding.conversationLayout.getConversationList().setOnItemLongClickListener(new ConversationListLayout.OnItemLongClickListener() {
@Override
public void OnItemLongClick(View view, int position, ConversationInfo conversationInfo) {
//这个是删除、置顶操作
startPopShow(view, position, conversationInfo);
}
});
CommunicationBinding.conversationLayout.getConversationList().setOnItemClickListener(new ConversationListLayout.OnItemClickListener() {
@Override
public void onItemClick(View view, int position, ConversationInfo messageInfo) {
//与该用户聊天,你可以在messageInfo,拿到该类关键信息,并传到聊天界面
}
});
4.1.4:聊天传照片时报错:降低版本,gradle配置
compileSdkVersion: 29,
buildToolsVersion: "29.0.3",
minSdkVersion : 21,
targetSdkVersion : 28,
5、总结
我不过是站在巨人的肩膀上,任重而道远。后期会完整的钻研。少走弯路,提供工作效率。有什么问题也可以私信我,非常乐意解答。