本文出自APICloud官方论坛,感谢论坛版主uoaccw的分享。

500592627_wx.jpg

本模块封装了环信即时通讯云的开放SDK。基于官方发布的 easeChat 模块,在注册登录类接口基础上,扩展添加了 UI 类接口,适用于对 UI 设计要求不高的项目。可直接调用相关接口弹出聊天对话页面,真正实现了敏捷开发。

模块文档地址链接

调用模块前的步棸:

1. 注册环信账号,在环信管理后台并创建应用,获取环信key。详见文档:docs.easemob.com/start/

2. 配置环信key到APICloud项目的config.xml文件。注意Android iOS的配置方法不同。

配置方法如下:

名称:UIEaseChat

参数:appKey、ios_apnsCertName

配置示例:

<feature name="UIEaseChat">

    <param name="appKey" value="11541702211*****" />
    <param name="ios_apnsCertName" value="81qz3dBYB5q2n****" />
    <param name="enableDnsConfig" value="true" />
    <param name="chatPort" value= ""/>
    <param name="chatServer" value="" />
    <param name="restServer" value="" />
    <param name="dnsURL" value="" />
  </feature>

复制代码

Android平台配置方法如下:

<meta-data      name="EASEMOB_APPKEY"      value="1176170302*******" />


3. 添加UIEaseChat模块,编译自定义loader。

需要了解的知识:

自己的APP的用户体系和环信平台及UIEaseChat模块的关系。

详见文档:docs.easemob.com/start/

建议没接触过即时聊天架构的朋友多读几遍,不是很理解的话,隔几天再读。

通过阅读上面的文档我们了解到,创建环信账号应放到服务器端处理。


模块方法简介:

1. 登录接口。登录环信。

var UIEaseChat = api.require('UIEaseChat');

        UIEaseChat.login({
            username: usernameVal,   //username是第三方用户体系中的primary key。需要在AppKey的范围内唯一。
            password: passwordVal,   //hash后的密码
            autoLogin: true
        }, function(ret, err) {
            if (ret.status) {
                api.alert({
                    msg: '登录成功'
                });
            } else {
                api.alert({
                    msg: JSON.stringify(err)
                });
            }
        });

复制代码


2. 发起聊天接口

var UIEaseChat = api.require('UIEaseChat');

        UIEaseChat.chat({
            conversationId: to,     //会话对方的用户名. 如果是群聊, 则是群组的id
            chatType: 'chat',         //会话类型:chat:单聊会话; groupChat:群聊会话; chatRoom:聊天室会话
            location: {
                size: 12,
                color: '#fff'
            },
            callishidden: false,
            text: {
                size: 15,
                color: '#000'
            },
            avatar: {
                size: 40,
                corner: 20
            },
            navigationBar: {
                title: 'APICloud',
                titleColor: '#fff',
                bgColor: '#4169E1',
                backColor: '#fff',
                statusBarAppearance: true,
                backImg: 'widget://image/back.png'
            }
        });

复制代码


3. 监听类接口。监听到对应事件后,做相应的处理。下面列举三个,模块文档上还有其他事件的监听。

addConnectionListener(callback(ret)) 连接服务器的状态变化事件的监听

addAccountListener(callback(ret)) 账号异常事件的监听

addCallEventListener({params},callback(ret)) 设置音视频通话的监听


addCallEventListener音视频监听接口需要注意:

name:


类型:字符串

描述:监听事件名字

取值范围:

callDidReceive:收到来电 (android不支持,android会在收到来电后自动弹出通话界面,所以不需要添加此监听)

didRecvInvite:被邀请加入会议(群聊)

iOS需添加来电监听,监听到来电事件时,调用chatInvite()接口打开音视频通话页面。


示例:

var UIEaseChat = api.require('UIEaseChat');

        UIEaseChat.addCallEventListener({
            name: 'callDidReceive'
        }, function(ret, err) {
            if (ret) {
                console.log(JSON.stringify(ret));
 
                UIEaseChat.chatInvite({
                    chatType: 'video',
                    username: usernameVal
                }, function(ret) {
                    if (!ret.status) {
                        api.alert('用户拒绝');
                    }
                });
            }
        });

复制代码


测试时用两个手机,登录不同的账号,即可互发消息。

模块效果截图: