Android引入腾讯im即时通信


一、运行官方demo遇到的问题?

在运行官方demo时,可能出现提示某个插件不存在,而大概率时因为整个demo中,并没有使用到该插件;
1、当第一次进入时,demo很大可能性,会引入企业版的依赖,但是,项目中并不存在;

android 怎么主动触发anr 安卓怎么触发trim_移动开发

当你正常运行项目时,可能会报如下错误;2、 解决办法

android 怎么主动触发anr 安卓怎么触发trim_移动开发_02

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、总结

我不过是站在巨人的肩膀上,任重而道远。后期会完整的钻研。少走弯路,提供工作效率。有什么问题也可以私信我,非常乐意解答。