Weex Android 接入环信聊天功能(一)会话窗口

更新日期: 2019-07-07 阅读次数: 11857 分类: weex

交互逻辑

  • 点击交流功能 -> 进入环信 Demo 的通信录页面?会话列表页面?感觉会话列表页面更合理一点
  • 从 Weex 通信录点击发送信息 -> 进入环信 Demo 的具体某个联系人的实时聊天页面

实际上就是在 Weex 中需要跳转到 demo 里的具体某个 activity。

最麻烦的逻辑在于如何从环信 UI 跳回到 Weex 的页面。

weex 接入环信聊天功能

Android Activity 间的切换

实现参考 Start Another Activity | Android Developers

Android 官方的 Getting Started 是最好的入门文档。

首先,下载个 demo 看看环信是如何实现 activity 间切换的。

demo 中有两个重要的 activity

  • MainActivity: 包含了三个 tab, 默认为会话列表页面 tab
  • ChatActivity: 会话页面

使用 EaseUI 集成还是使用 Demo 的代码

参考 教你如何快速集成环信(android端EaseUI

从资料来看,直接集成 EaseUI 就可以。

gradle 依赖冲突

Error:Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (24.2.1) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.

解决方法,在 app 的 gradle build 中加入

androidTestCompile 'com.android.support:support-annotations:24.2.1'

目的是显式地声明我要使用指定版本的依赖。

参考: Resolving Conflicts in android gradle dependencies – Mindorks

调用环信的 EaseUI 界面

简单的测试方法就是,默认加载 EaseUI 的 chat activity

package com.alibaba.weex;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;

import com.hyphenate.EMCallBack;
import com.hyphenate.easeui.EaseConstant;
//import com.hyphenate.easeui.ui.EaseConversationList;
import com.hyphenate.easeui.ui.EaseChatFragment;
import com.hyphenate.chat.EMClient;

public class ConversationActivity extends FragmentActivity {
    //protected EaseConversationList conversationListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_conversation);

        EMClient.getInstance().login("test1", "123456", new EMCallBack() {//回调
            @Override
            public void onSuccess() {
                EMClient.getInstance().groupManager().loadAllGroups();
                EMClient.getInstance().chatManager().loadAllConversations();
                Log.d("main", "登录聊天服务器成功!");
            }

            @Override
            public void onProgress(int progress, String status) {

            }

            @Override
            public void onError(int code, String message) {
                Log.d("main", "登录聊天服务器失败!");
            }
        });

        Intent intent = getIntent();
        String targetUserId = intent.getStringExtra(EaseConstant.EXTRA_USER_ID);

        //new出EaseChatFragment或其子类的实例
        EaseChatFragment chatFragment = new EaseChatFragment();
        //传入参数
        Bundle args = new Bundle();
        // 默认为单聊
        // args.putInt(EaseConstant.EXTRA_CHAT_TYPE, EaseConstant.CHATTYPE_GROUP);
        args.putString(EaseConstant.EXTRA_USER_ID, targetUserId);
        chatFragment.setArguments(args);
        getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
    }

}

报错

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/android.test.runner.jar" ...
couldn't find "libhyphenate.so"

需要在 app 的 build.gradle 里引入

compile 'com.hyphenate:hyphenate-sdk:3.3.0'

原因是,之前只是引入了 easeui,但是没有引入聊天的 sdk。

No view found for id 0x7f0e0086 (com.sunzhongwei.test:id/container) for fragment EaseChatFragment{e1af943 #0 id=0x7f0e0086}

从代码来看

getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();

布局里需要有container这个id的控件

android:id="@+id/container"

在 layout 的 xml 文件中加入这行就 OK 了。

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式