APICloud平台的融云2.0集成

融云2.0的官方文档地址:http://docs.apicloud.com/端API/开放SDK/rongCloud2

项目需要IM模块,最后还是选择了融云.在iOS原生开发中,融云sdk集成了聊天界面,给开发者提供了很大的便利,但是在apicloud平台上,由于开发者应用IM的场景各异,需求不统一,所以官方没有将聊天界面集成到模块中.

因此我选择了AUI这套专门为apicloud提供的前端开发框架进行IM界面的搭建.AUI官方地址:http://www.auicss.com.

这套框架集成了很多手机端的UI,效果不错,而且还在不断的更新中,大家不妨尝试一下.我用过其中的几个,总体感觉还是不错的!

接下来,就具体的说一说RongYun集成的步骤了(本文会不断的更新,若发现不妥之处和需要改进的地方,可以给我留言,谢谢!)

一.准备工作

在集成融云2.0之前,首先要到融云官网上进行注册,然后添加应用信息,并且生成两个测试用的targetId并记录下对应的token(这种方法仅为测试使用)  融云的官网:http://www.rongcloud.cn

之后在API调试里面 生成userID对应的token,这些信息在初始化融云时会用到,

之后再次生成一个userID,并记录对应的token.这样,就相当于建立了两个用户,用户A和用户B,,之后便可实现用户A与用户B之间的通信了.

上述内容准备完之后,就要在自己的apicloud应用中添加融云2.0模块了.  apicloud中的融云集成之前的准备在此略过,可以参照官方文档.

二.融云2.0的集成

在详细的介绍之前,先要说一说这个聊天界面使用的框架和模板.

1.doT.js (不熟悉的小伙伴可以参照这篇博客: http://www.cnblogs.com/kuikui/p/3505768.html)

2.AUI 前端UI框架(地址在上面给过了,很实用,小伙伴们可以看一看).

3.UIChatBox, 文档地址: http://docs.apicloud.com/端API/界面布局/UIChatBox#m11

好了,有了这几个,就可以轻松的完成一个简单的聊天界面的集成了!

1.融云2.0的初始化

首先要在config文件里填入一下代码

<feature name="rongCloud2">
    <param name="appKey" value="这里填写在融云官网自己app对应的key" />
  </feature>

关于初始化,有一点一定要知道:融云对于整个应用初始化只需要一次,
再次初始化或者 connect 就会出错.

  

<span style="font-size:14px;">apiready = function () {

        //RongY初始化
        var rong = api.require('rongCloud2');
        rong.init(function (ret, err) {
            if (ret.status == 'error') {
                api.toast({msg: err.code});
            } else {
                api.toast({msg: "success"});
                //链接到RongY
                rong.connect({
                            token: '自己的token'
                        },
                        function (ret, err) {
//                            alert(JSON.stringify(ret));
                            if (ret.status == 'success') {
//                        api.toast({msg: ret.result.userId});
                                isConnetced = true;
//                        alert(isConnetced);
                                //实时监听收到的消息

                            }
                        });
            }
        });
    }</span>

上述代码是在进入聊天界面之前,对融云sdk进行的init和connect方法.

2.聊天界面UI

聊天界面UI就用到了AUI和doT.js.以下是详细的代码

<span style="font-size:14px;"><body>

<!--//发送语音提示框-->
<div class="aui-toast" style="display:none" id="loading">
    <div class="aui-toast-loading"></div>
    <div class="aui-toast-content"></div>
</div>
<!--聊天页面-->
<div id="wrap" class="flex-wrap flex-vertical">
    <div id="message-content2" style="margin-top: 10px"></div>
    <div class="aui-content aui-content-padded" id="message-content">
        <script id="message-content-template" type="text/x-dot-template">

            {{for(var i=0;i<it.length ;i++){}}

            {{? it[i].tag=== 'TxtMsg'}}
            <div class="{{=it[i].firstSendType}}" style="margin-top: 20px">
                {{? it[i].messageDirection=== 'SEND'}}
                <div class="aui-text-center history-date">{{=it[i].sentTime}}</div>
                {{?? it[i].messageDirection=== 'RECEIVE'}}
                <div class="aui-text-center history-date">{{=it[i].receivedTime}}</div>
                {{?}}
                <div class="{{=it[i].secondSendType}}"><img src="../image/demo1.png"></div>
                <div class="{{=it[i].thirdSendType}}">
                    <div class="{{=it[i].fourthSendType}}"></div>
                    <span id="txt">{{=it[i].content.text}}</span>
                </div>
            </div>
            {{?}}
            {{? it[i].tag === 'ImgMsg'}}
            <div class="{{=it[i].firstSendType}}" style="margin-top: 20px">
                {{? it[i].messageDirection=== 'SEND'}}
                <div class="aui-text-center history-date">{{=it[i].sentTime}}</div>
                {{?? it[i].messageDirection=== 'RECEIVE'}}
                <div class="aui-text-center history-date">{{=it[i].receivedTime}}</div>
                {{?}}
                <div class="{{=it[i].secondSendType}}"><img src="../image/demo1.png"></div>
                <div class="{{=it[i].thirdSendType}}">
                    <div class="{{=it[i].fourthSendType}}"></div>
                    <img class="lazy" id="image" style="width: 100px; height: 100px" ;
                         data-original="{{=it[i].content.imageUrl}}"
                         onclick="clickShowBigPic('{{=it[i].content.imageUrl}}')">
                </div>
            </div>
            {{?}}
            {{? it[i].tag === 'VcMsg'}}
            <div class="{{=it[i].firstSendType}}" style="margin-top: 20px">
                {{? it[i].messageDirection=== 'SEND'}}
                <div class="aui-text-center history-date">{{=it[i].sentTime}}</div>
                {{?? it[i].messageDirection=== 'RECEIVE'}}
                <div class="aui-text-center history-date">{{=it[i].receivedTime}}</div>
                {{?}}
                <div class="{{=it[i].secondSendType}}"><img src="../image/demo1.png"></div>
                <div class="{{=it[i].thirdSendType}}">
                    <div class="{{=it[i].fourthSendType}}"></div>

                    <div class="aui-chat-status"><i id="voice-length{{=it[i].messageId}}" class="">{{=it[i].content.duration}}"</i>
                    </div>
                    {{? it[i].content.duration <= '15'}}
                    <span style="width: {{=it[i].content.duration * 15}}px;height: 30px; border-radius: 5px; background: green"
                          onclick="playVoice('{{=it[i].messageId}}', '{{=it[i].</span><span style="font-family: Arial, Helvetica, sans-serif; font-size: 14px;">content</span><span style="font-family: Arial, Helvetica, sans-serif;">}}')"></span></span><span style="font-size:14px;">
                    {{??}}
                     <span style="width: 170px;height: 30px; border-radius: 5px; background: green"
                           onclick="playVoice('{{=it[i].messageId}}', '{{=it[i].content}}')"></span>
                    {{?}}
                </div>
            </div>
            {{?}}
            {{}}}
        </script>
    </div>
</div>
</body></span>

整个聊天界面的UI就是这些代码了,还是很简单的吧~~当然了,这里只实现了基本的功能,代码后续会不断的更新.

3.JS部分

在JS部分,要写的就是各种点击方法,数据的加载这些内容了,我们一个个的来看

到目前为止,我只集成了文本消息,图片消息,语音消息,定位消息(获取发送者位置,通过文本消息发送).

3.1 文本消息的发送

<span style="font-size: 18px;"> </span><span style="font-size:14px;">//发送消息
    function sengTxtMsg(p) {
        if (isConnetced) {

            var para;
            var rong = api.require('rongCloud2');
            rong.sendTextMessage({
                        conversationType: 'PRIVATE',
                        targetId: '13644978865',
                        text: p.msg,
                        extra: ''
                    }, function (ret, err) {

//                        alert(JSON.stringify((ret)));
                        //这里要判断消息类型,最后设定消息标签.
                        if (ret.status == 'prepare') {
                            var tag;
                            if (ret.result.message.objectName == "RC:TxtMsg") {
                                tag = "TxtMsg";
                            } else if (ret.result.message.objectName == "RC:ImgMsg") {
                                tag = "ImgMsg";
                            } else if (ret.result.message.objectName == "RC:VcMsg") {
                                tag = "VcMsg";
                            } else if (ret.result.message.objectName == "RC:LBSMsg") {
                                tag = "LBSMsg";
                            }

                            para = {
                                firstSendType: "aui-chat-sender",
                                secondSendType: "aui-chat-sender-avatar",
                                thirdSendType: "aui-chat-sender-cont",
                                fourthSendType: "aui-chat-right-triangle",
                                content: ret.result.message.content,
                                tag: tag,
                                //时间戳
                                sentTime: getTrueTime(ret.result.message.sentTime),
                                //发送类型
                                messageDirection: "SEND"
                            };
                            //这里我设置的每隔3分钟才会生成一个时间戳,如果没到三分钟时间为空,就显示不出来了
                            if (!timeTag) {
                                para.sentTime = "";
                            }
                        }

                        else if (ret.status == 'success') {
                           //doT.js的拼接
                            msgObj.push(para);
                            var interText = doT.template($("#message-content-template").text());
                            $("#message-content2").html(interText(msgObj));
                            $("img.lazy").lazyload();
                            document.getElementsByTagName('BODY')[0].scrollTop = document.getElementsByTagName('BODY')[0].scrollHeight;

                            //时间戳判断为false 不再发送
                            timeTag = false;
                        }
                        else if (ret.status == 'error')
                            api.toast({msg: err.code});
                    }
            );
        } else {
            api.alert({
                msg: "未连接到服务器"
            });
        }
    }</span>

ok,再简单的说明一下:通过点击键盘发送按钮,获取到输入框的文本信息,将其作为参数传递到该方法中,通过该方法将消息发送到用户B.

可见iPhone模拟器上及时的收到了我发送的文本消息.

3.2 图片消息的发送

//发送图片
    function sendPictures(index) {
        var type = "";
        if (index == "0") {
            type = 'album';
            getPicture(type);
        } else if (index == "1") {
            type = 'camera';
            getPicture(type);
        } else {
            getLocation();
        }
    }

    //获取图片
    function getPicture(type) {

        var para;
        api.getPicture({
            sourceType: type,
            encodingType: 'jpg',
            mediaValue: 'pic',
            destinationType: 'url',
            allowEdit: false,
            quality: 80,
//            targetWidth: 100,
//            targetHeight: 100,
            saveToPhotoAlbum: false
        }, function (ret, err) {
            if (ret) {

                var para;
                var rong = api.require('rongCloud2');
                rong.sendImageMessage({
                            conversationType: 'PRIVATE',
                            targetId: '13644978865',
                            imagePath: ret.data,
                            extra: ''
                        }, function (ret, err) {
//                            alert(JSON.stringify((ret)));
                            if (ret.status == 'prepare') {
                                var tag;
                                if (ret.result.message.objectName == "RC:TxtMsg") {
                                    tag = "TxtMsg";
                                } else if (ret.result.message.objectName == "RC:ImgMsg") {
                                    tag = "ImgMsg";
                                } else if (ret.result.message.objectName == "RC:VcMsg") {
                                    tag = "VcMsg";
                                } else if (ret.result.message.objectName == "RC:LBSMsg") {
                                    tag = "LBSMsg";
                                }

                                para = {
                                    firstSendType: "aui-chat-sender",
                                    secondSendType: "aui-chat-sender-avatar",
                                    thirdSendType: "aui-chat-sender-cont",
                                    fourthSendType: "aui-chat-right-triangle",
                                    content: ret.result.message.content,
                                    tag: tag,
                                    //时间戳
                                    sentTime: getTrueTime(ret.result.message.sentTime),
                                    //发送类型
                                    messageDirection: "SEND"
                                };
                                //判断时间
                                if (!timeTag) {
                                    para.sentTime = "";
                                }
                            }

                            else if (ret.status == 'progress') {

                            }
//                                api.toast({msg: ret.result.progress});
                            else if (ret.status == 'success') {

                                //时间戳判断为false 不再发送
                                timeTag = false;
                                msgObj.push(para);

                                var interText = doT.template($("#message-content-template").text());
                                $("#message-content2").html(interText(msgObj));
                                $("img.lazy").lazyload();
                                document.getElementsByTagName('BODY')[0].scrollTop = document.getElementsByTagName('BODY')[0].scrollHeight;
                            }

                            else if (ret.status == 'error') {
                                api.toast({msg: "请检查当前网络状态"});
                            }
                        }
                );
            } else {
                alert(JSON.stringify(err));
            }
        });
    }

在做一下简要的说明:首先判断图片的来源:(1).用户相册 (2).相机 从相应的来源选取图片后就开始执行图片发送的方法了.

在手机上拍了一张电脑的图片发送后,iPhone模拟器就会收到刚刚收到的图片信息了.

3.3 语音消息发送

//发送语音消息
    function sendVoiceMsg(para) {

        var param;
        var rong = api.require('rongCloud2');
        rong.sendVoiceMessage({
                    conversationType: 'PRIVATE',
                    targetId: '13644978865',
                    voicePath: para.path,
                    duration: para.duration,
                    extra: ''
                }, function (ret, err) {
//                    alert(JSON.stringify(ret));
                    if (ret.status == 'prepare') {
//                        api.toast({ msg: JSON.stringify(ret.result.message) });

                        var tag;
                        if (ret.result.message.objectName == "RC:TxtMsg") {
                            tag = "TxtMsg";
                        } else if (ret.result.message.objectName == "RC:ImgMsg") {
                            tag = "ImgMsg";
                        } else if (ret.result.message.objectName == "RC:VcMsg") {
                            tag = "VcMsg";
                        } else if (ret.result.message.objectName == "RC:LBSMsg") {
                            tag = "LBSMsg";
                        }

                        param = {
                            firstSendType: "aui-chat-sender",
                            secondSendType: "aui-chat-sender-avatar",
                            thirdSendType: "aui-chat-sender-cont",
                            fourthSendType: "aui-chat-right-triangle",
                            content: ret.result.message.content,
                            tag: tag,
                            //时间戳
                            sentTime: getTrueTime(ret.result.message.sentTime),
                            //发送类型
                            messageDirection: "SEND"
                        };
                        //判断时间
                        if (!timeTag) {
                            param.sentTime = "";
                        }

                    }

                    else if (ret.status == 'success') {
                        //改变时间戳状态
                        timeTag = false;

                        msgObj.push(param);
////                        alert(JSON.stringify(msgObj));
                        alert(JSON.stringify(msgObj[msgObj.length - 1]));
                        var interText = doT.template($("#message-content-template").text());
                        $("#message-content2").html(interText(msgObj));
                        $("img.lazy").lazyload();
                        document.getElementsByTagName('BODY')[0].scrollTop = document.getElementsByTagName('BODY')[0].scrollHeight;
                    }
                    else if (ret.status == 'error') {
//                        api.toast({ msg: err.code });
                    }
                }
        );
    }
</span>

发送语音消息前要先调用 api.startRecord()方法记录刚才的录音,最后通过上述方法将语音发送给对方.




 
 上面就是我刚才发送的一连串语音消息了.

3.4 消息的接收
 消息的接收,要用到 rong.setOnReceiveMessageListener这个方法.也就是这个方法会监听你收到的消息.具体代码如下
var rong = api.require('rongCloud2');
        rong.setOnReceiveMessageListener(function (ret, err) {
//            alert(JSON.stringify(ret));
            var tag;
            var para;
            if (ret.result.message.objectName == "RC:TxtMsg") {
                tag = "TxtMsg";
            } else if (ret.result.message.objectName == "RC:ImgMsg") {
                tag = "ImgMsg";
            } else if (ret.result.message.objectName == "RC:VcMsg") {
                tag = "VcMsg";
            } else if (ret.result.message.objectName == "RC:LBSMsg") {
                tag = "LBSMsg";
            }

            para = {
                firstSendType: "aui-chat-receiver",
                secondSendType: "aui-chat-receiver-avatar",
                thirdSendType: "aui-chat-receiver-cont",
                fourthSendType: "aui-chat-left-triangle",
                content: ret.result.message.content,
                tag: tag,
                receivedTime: getTrueTime(ret.result.message.receivedTime),
                messageDirection: "RECEIVE"
            };
            if (!timeTag) {
                para.receivedTime = "";
            }

            msgObj.push(para);
            var interText = doT.template($("#message-content-template").text());
            $("#message-content2").html(interText(msgObj));
            $("img.lazy").lazyload();
            document.getElementsByTagName('BODY')[0].scrollTop = document.getElementsByTagName('BODY')[0].scrollHeight;
            //时间戳状态
            timeTag = false;

        });

 上面就是三条通过iPhone模拟器发送的消息,一条语音消息,一条图片消息,一天文字消息.

3.4 获取历史消息
  获取历史消息也用对应的方法.而且这些消息是存在本地的,所以获取很方便
//获取最近聊天信息
    function getRecentConverMsg() {

//        alert(num);
        var rong = api.require('rongCloud2');
        //先获取之前的聊天记录
        rong.getHistoryMessages({
            conversationType: 'PRIVATE',
            targetId: '13644978865',
            oldestMessageId: -1,
            count: 500
        }, function (ret, err) {

//            api.refreshHeaderLoadDone();
            var arr = [];
            arr = ret.result;
//            alert(JSON.stringify(arr));
            //记录最早的时间戳
            $api.setStorage('time', arr[arr.length - 1].receivedTime);
            for (var i = arr.length - 1; i >= 0; i--) {
                if (arr[i].messageDirection == "SEND") {
                    arr[i].firstSendType = "aui-chat-sender";
                    arr[i].secondSendType = "aui-chat-sender-avatar";
                    arr[i].thirdSendType = "aui-chat-sender-cont";
                    arr[i].fourthSendType = "aui-chat-right-triangle";
                } else {
                    arr[i].firstSendType = "aui-chat-receiver";
                    arr[i].secondSendType = "aui-chat-receiver-avatar";
                    arr[i].thirdSendType = "aui-chat-receiver-cont";
                    arr[i].fourthSendType = "aui-chat-left-triangle";
                }

                if (arr[i].objectName == "RC:TxtMsg") {
                    arr[i].tag = "TxtMsg";
                } else if (arr[i].objectName == "RC:ImgMsg") {
                    arr[i].tag = "ImgMsg";
                } else if (arr[i].objectName == "RC:VcMsg") {
                    arr[i].tag = "VcMsg";
                } else if (arr[i].objectName == "RC:LBSMsg") {

                }

                //如果时间间隔大于五分钟 加上时间戳
                if (arr[i].receivedTime - $api.getStorage("time") >= 180000) {
//                   alert("yes");
                    $api.setStorage('time', arr[i].receivedTime);
                    arr[i].receivedTime = getTrueTime(arr[i].receivedTime);
                    arr[i].sentTime = getTrueTime(arr[i].sentTime);
                } else {
                    arr[i].receivedTime = "";
                    arr[i].sentTime = "";
                }

                msgObj.push(arr[i]);
            }
            var interText = doT.template($("#message-content-template").text());
            $("#message-content2").prepend(interText(msgObj));
            $("img.lazy").lazyload();
            document.getElementsByTagName('BODY')[0].scrollTop = document.getElementsByTagName('BODY')[0].scrollHeight;

        });

    }
 
  这样,我可以获取到之前3.31的聊天记录.

  到这里,最基本的功能介绍完了,后续的功能还有很多,比如图片的查看,保存图片到本地,语音的播放等等,都是小问题了,这些代码就不放上来了.
  本文会不断更新,欢希望大家提出更多的意见,一起进步!我的微信656593047,可以加我一起交流!!
				
时间: 2024-10-06 18:59:35

APICloud平台的融云2.0集成的相关文章

iOS开发融云即时通讯集成详细步骤

1.融云即时通讯iOS SDK下载地址   http://rongcloud.cn/downloads  选择iOS   SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注册了融云开发者帐号,请前往 融云开发者平台 创建应用:如果您还没有注册融云开发者帐号,请前往 融云官方网站 首先注册开发者帐号,注册后创建应用.注册地址  https://developer.rongcloud.cn/signup 3.登陆融云开发者平台 https://developer.rong

融云参加RTC实时互联网大会 现场集成IM SDK

9月21至22日,由全球实时云服务商声网Agora.io主办的RTC2017实时互联网大会在北京万豪酒店成功举办.作为亚洲最权威的RTC实时通信行业技术盛会,会议吸引了来自全球上千名开发者参加,Google.Slack.阿里巴巴.猎豹移动.荔枝FM等公司的技术大咖分享了各自在实时通信领域的技术.应用与经验.融云作为声网紧密合作的伙伴受邀参会,出席全球首个实时互联网生态圈Agora Plus启动仪式,并在Coding Workshop的环节中,助力开发者现场实现App即时通讯能力. 成为全球首个实

融云即时通讯~~

iOS开发融云即时通讯集成详细步骤 端身正义 发表于 2016-04-12 16:12:11 1.融云即时通讯iOS SDK下载地址   http://rongcloud.cn/downloads  选择iOS   SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注册了融云开发者帐号,请前往 融云开发者平台 创建应用:如果您还没有注册融云开发者帐号,请前往 融云官方网站 首先注册开发者帐号,注册后创建应用.注册地址  https://developer.rongclo

融云CEO韩迎:如何基于云通讯构建企业竞争力

近日,"第四届互联网+高峰论坛暨大数据应用峰会 CIO 时代中国行苏州站"活动成功举行.本次论坛由中国新一代 IT 产业推进联盟.江苏省企业信息化协会指导,CIO 时代学院.苏州工业园区人工智能产业协会.江苏省企业信息化协会苏州代表处联合主办,吸引了来自全国各地的近150名行业翘楚.知名 CIO 及专家学者参会,与会者围绕"新 IT 助力制造业再增长"的主题进行深入沟通与探讨. 活动现场 融云 CEO 韩迎受邀参会,并就"如何基于云通讯构建企业移动信息化竞

Asp.Net WebApi+融云即时通讯+Android构建自己的移动IM

IM,让我敬畏的一项技术 在我的观点里,即时通信,p2p,音视频传输是程序开发中很有难度的领域,这也是为什么我们很少看到有程序员可以在自己的应用里实现这些技术,尤其是即时通信,要实现高稳定性,高并发性,及时性,低流量和弹无虚发,需要丰富的开发经验做支撑,仅仅是拿来一个开源项目恐怕是难以完成这项任务的.放眼看看国内有即时通信技术的,无一不是大公司.大部分的程序开发者的大部分工作时间都是用来做业务层面的开发,根本没有时间和精力去潜心研究一整套的技术框架,因为公司要盈利,要挣钱,没那么多闲钱养着你去专

【APICloud平台融云模块教程第一弹】聊天会话的实现及UI

闲来无事写个教程给大家.实现功能:融云会话聊天及UI,发送表情消息使用模块:rongCloud   chatBox融云的各种申请我就不说了.教程开始:因为融云为第三方模块,每次调试都得需要云编译,建议大家先把UI和基本代码做好.JS插件使用:zepto.min.js一.UI的制作效果图: CSS代码:/*会话消息容器*/#messageList { padding: 15px 0; overflow: hidden;}/*接收消息类,左侧*/.receiver{ clear:both;}.rec

IOS集成融云SDK即时通讯

相信大家在项目中会用到即时通讯功能,自己去写的话会需要前后台合作,会大大加大开发的周期,所以考虑使用第三方的即时通讯平台,比如现在有融云,环信....等等等!楼主在项目开发过程中使用到过环信和融云,今天就为大家写下IOS端集成环信的方法和可能会遇到的问题.(融云提供聊天会话列表和聊天界面并且允许我们自定义,所以很方便的). 一:准备工作        1.首先打开融云官网http://www.rongcloud.cn/,注册自己的账户,并登陆.        2.点击左边创建应用,在打开的小窗口

apicloud+融云实现即时通讯

请尊重作者的辛勤劳动!!! 使用apicloud开发已经快2个月了,起初的目的就是为了实现安卓和苹果的兼容,属于一个试验项目,究竟apicloud是否能够满足公司的要求?最 终看来还是不错的,使用apicloud+融云实现了类似微信即时通讯的功能.看到有很多后来的人依然在这块挣扎,我就把自己的实现思路和成果分享出来和 大家一起交流一下,我也是第一次做手机开发,有很多经验不足的地方,希望大家能够直接指出来,我也不断完善自己的产品.     这次没有使用本地数据库,所有数据都是从融云和服务器获取,会

ios开发之 -- 5分钟集成融云的客服功能

最近项目中遇到了客服的功能,首先想到的就是使用融云的功能,因为以前做的即时通讯的项目,用的都是融云的sdk,花了点时间研究了下,希望能帮到大家! 废话不多说,步骤如下: 一.申请融云账号 二.创建应用 三.开通客服服务,融云的客服集成的是智齿客服服务系统,完全能够满足使用! 四.开通客服服务后,会生成客服id,target id就是这个,进入聊天页面之前用的 五.进入应用管理界面,点击API调试,id和username,还有头像url可以随便输,测试用的,下面会有打印,生成一个token 六.准