關於android引入騰訊即時通訊im
阿新 • • 發佈:2020-12-16
技術標籤:android第三方工具踩坑集合移動開發
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" />
2.3.2:初始化聊天列表 根據你的頁面型別,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,