开发者中心

CLIM 简化版 Unity SDK集成说明书

版权申明
本文档包含了来自上海璟梦信息科技有限公司信息科技有限公司的机密技术和商业信息,这些信息作为上海璟梦信息科技有限公司信息科技技术有限公司专用。接受本文档即视为表示同意对其内容保密,并且未经上海璟梦信息科技有限公司信息科技有限公司书面许可,不得复制、泄露或散布本文档的全部或部分内容。
本文档及其描述的内容及产品的著作权和版权受有关法律保护,对本文档内容的任何形式的非法复制,泄露或散布,将导致承担相应的法律责任。
上海璟梦信息科技有限公司信息科技有限公司保留在不另行通知的情况下修改本文档的权利,并保留对本文档内容的全部解释权。
修订历史

日期 版本 说明
2015-05-09 1.0.0 文档起草
2016-06-07 2.0.1 优化接口
2020-11-01 502 优化SDK性能

1.概述 ( Overview )

1.1 范围 ( Scope )

定义CL语音IM聊天sdk客户端集成接口。

1.2 发布 ( Issue )

本文档发布于上海璟梦信息科技有限公司信息科技有限公司技术部、产品部及此项目合作公司相关人员。本文档不属于客户契约性文档,不能发布予客户。

1.3 综述 ( Brief )

2.定义 ( Definition )

2.1 术语 ( Terminologies )

术语 定义
appId 应用编号(需向CL申请获取)

表格1     术语表

2.2 约束 ( Constraints )

3.运行环境

4.集成步骤(必读)

4.1 申请appId

提供APP或游戏名称、包名和公司名称等信息。在sdk对接交流群@CL语音相关对接人既可。

5.CLIMSDK集成指南

5.1 Android快速集成

5.1.1 appid配置

1、AndroidManifest.xml里面,如果接入方有自己的AndroidManifest.xml,那么把以下部分整合到接入方的AndroidManifest.xml里。
 <application
        android:icon=“@drawable/app_icon”
        android:label=“@string/app_name” android:debuggable=“false”
        android:theme=“@android:style/Theme.Holo.Light.DarkActionBar”
        android:name=“com.chuanglan.im.sdk.lib.CLImSdkApplication”>
       
        <meta-data
            android:name=“CLImSdkAppId”
            android:value=“100041”/>
这一句改成自己的APPID
<meta-data
android:name=“CLImSdkAppId
android:value=“自己的APPIDss” />
2、接入方如果application中android:name被占用采用这种方式:
继承那个Application然后在oncreate()中添加
com.chuanglan.im.sdk.lib.CLImLoginInit.initApplicationOnCreate(this, “appid”);
代码示例:
Public class MyApplication extends Application
{
   publicvoidonCreate()
     {
   super.onCreate();
       com.chuanglan.im.sdk.lib.CLImLoginInit.initApplicationOnCreate(this.getApplicationContext(), “填申请的appid”);
    }
}

5.1.2 CL权限配置

<!-- IMSDK 所需权限-->
<uses-permissionandroid:name="android.permission.INTERNET" />
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE" />
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permissionandroid:name="android.permission.RECORD_AUDIO" />
<uses-permissionandroid:name="android.permission.VIBRATE" />
<uses-permissionandroid:name="android.permission.GET_TASKS" />
<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permissionandroid:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permissionandroid:name="android.permission.WRITE_SETTINGS" />

5.2 iOS快速集成

5.2.1 运行环境在XCode9(ios8.0)版本以上

5.2.2 Unity导出Xcode工程后需导入所需要的Framework(如果已导入不必重复添加);需加入SafariServices.framework、ImageIO.framework、security.framework、libc++.tbd和libz.tbd


5.2.3 iOS10需添加以下配置

加语音权限

5.2.4 Build Setting->OtherLinker Flags添加-ObjC

6.CLIMSDK 接口设计

6.1 初始化注册SDK

注:游戏初始化时调用此接口 保证后续能够安全使用语音功能;

6.1.1 调用接口

int CLImSdk_Init(uint context, uintappid, string path, bool isTest, bool oversea)

接口字段 类型 是否必填 说明
context uint 回调上下文,填0
appid uint 需向CL申请一个appid,申请流程请参考4.1,测试请用申请的appid
path string 保存数据库文件和缓存提供路径
isTest bool 传false
oversea bool true海外版本,false国内版本
返回 0表示成功,-1表示失败

代码示例:
1.CLImSdkApi.Instance.CLImSdk_Init(“100041”, Application.persistentDataPath, falsefalsefalse, (msg) =>  
2.     {  
3.         CLImSdkPrint.CLImSdk_Debug(“Init”, msg);  
4.         JsonData initData = JsonMapper.ToObject(msg);  
5.         if (JsonHelp.getIntValue(initData, “result”) == 0)  
6.         {  
7.             labelText = “初始化成功”;  
8.         }  
9.         else  
10.           {  
11.               labelText = “初始化失败”;  
12.           }  
13.           EventListenerInit();  
14.  });  

6.2 登录

注:游戏登录时调用此接口

6.2.1 调用接口

Void CLImSdk_Binding(stringtt, stringgameServerID, string[] wildCard, intreadStatus, System.Action Response)

接口字段 类型 是否必填 说明
tt string {“nickname”:“Andy”, “uid”:“id123”}
注:uid和nickname不能超过45个字符
gameServerID string 传默认值1
wildCard string[] 传如下默认值
string[] wildcard = newstring[2];
wildcard[0] = “0x001”;
wildcard[1] = “0x002”;
readStatus int 传默认值0

注:游戏进入主界面之前调用此接口,不同客户端不能登陆相同uid,目前tt为 {“uid”:“账号”,“nickname”:“昵称”}  该json格式,由游戏方的应用账号和游戏角色名称来进行绑定;
uid要全局唯一,如果不同区服有相同的uid建议gameServerID+用户编号(uid)组成新的uid
代码示例:
1.  private string[] arrayList;//频道标识码列表  
2.arrayList = new string[2] { “0X001”, “0X002” };  
3.string tt = string.Format(“{{“nickname:”:”{0}“,“uid”:”{1}“}}”, “123”, “1234”);  
4.CLImSdkApi.Instance.CLImSdk_Binding(tt, “1”, arrayList, (msg) =>  
5.    {  
6.        CLImSdkPrint.CLImSdk_Debug(“CLImSdk_Binding”, msg);  
7.        JsonData BindingData = JsonMapper.ToObject(msg);  
8.        if (JsonHelp.getIntValue(BindingData, “result”) == 0)  
9.            {  
10.                  labelText = “登录成功”;   
11.            }         
12.          else  
13.            {  
14.          string labelText = string.Format(“登录失败,错误消息:{0}”, JsonHelp.getIntValue(BindingData, “msg”));  
15.                  labelText = “登录成功”;  
16.             }  
17.          CLImSdkApi.Instance.ClImSdk_setSpeech_language(1, 0);//设置语音识别文字类型  
18.      }); 

6.2.2 回应结果

ImThirdLoginResp类字段信息:

对象字段 类型 是否必填 说明
result int 返回结果0为成功,非0是失败
msg string 错误描述
userId int CLID
nickName string 昵称
thirdUserId string 第三方用户ID
thirdUseName string 第三方用户名

6.3登出

6.3.1 调用接口

CLImSdkApi.Instance.CLImSdk_LogOut();

6.4 工具

6.5 开始录音

6.5.1 调用接口

void CLImSdk_startAudioRecord(string filePath,string ext=“,int speech=0”)

接口字段 类型 是否必填 说明
filePath string 录音文件保存路径(.amr)
speech int 默认是0:为普通录音;
1:录音完成上传和识别,结束录音时,会收到上传回调和识别回调;
2:录音完成上传,结束录音时,会收到上传回调
ext string 扩展标记

代码示例:
1.filePath = string.Format(“{0}/{1}.amr”, Application.persistentDataPath, DateTime.Now.ToFileTime());             
2.CLImSdkPrint.CLImSdk_Debug(“FilePath:” + filePath);              
3.CLImSdkApi.Instance.CLImSdk_startAudioRecord(filePath, “test”, audioRecordNumber);  

6.6 结束录音

6.6.1 调用接口

void CLImSdk_stopAudioRecord(System.Action StopAudioRecord)
代码示例:
1.CLImSdkApi.Instance.CLImSdk_stopAudioRecord((msg) =>  
2.         {  
3.             labelText = “录音完成” + msg;  
4.             CLImSdkPrint.CLImSdk_Debug("录音完成 " + msg);  
5.             JsonData data = JsonMapper.ToObject(msg);  
6.             voicefilepath = JsonHelp.getStringValue(data, “strfilepath”);  
7.             voiceTime = JsonHelp.getIntValue(data, “time”);  
8.             if (audioRecordNumber == 0)//如果等于普通录音需要手动上传  
9.             {  
10.                   CLImSdkApi.Instance.CLImSdk_uploadFile(voicefilepath, DateTime.Now.ToFileTime().ToString(), (data1) =>  
11.                   {  
12.                       //上传成功之后需要处理的逻辑  
13.                   });  
14.               }  
15.           }  
16.           , (uploadData) =>  
17.           {  
18.               JsonData upLoadData = JsonMapper.ToObject(uploadData);  
19.               voiceUrl = JsonHelp.getStringValue(upLoadData, “fileurl”);  
20.               if (JsonHelp.getIntValue(upLoadData, “result”) == 0)  
21.               {  
22.                   labelText = “语音上传成功” + uploadData;  
23.                   CLImSdkPrint.CLImSdk_Debug(“语音上传成功” + uploadData);  
24.               }  
25.               else  
26.               {  
27.                   labelText = “语言上传失败” + uploadData;  
28.                   CLImSdkPrint.CLImSdk_Debug(“语言上传失败” + uploadData);  
29.               }  
30.           }, (speechData) =>  
31.           {  
32.               JsonData speechStop = JsonMapper.ToObject(speechData);  
33.               if (JsonHelp.getIntValue(speechStop, “errId”) == 0)  
34.               {  
35.                   labelText = “语言识别完成:” + JsonHelp.getStringValue(speechStop, “resultInfo”);  
36.                   CLImSdkPrint.CLImSdk_Debug(“语言识别完成” + JsonHelp.getStringValue(speechStop, “resultInfo”));  
37.               }  
38.           }  
39.           );  

6.6.2 回调接口

onImSdkLiveImAudioRecordResp回调字段信息:

对象字段 类型 是否必填 说明
time int 录音时长(毫秒)
strfilepath string 录音保存文件本地路径名
ext string 扩展标记

onImSdkLiveImUploadFileResp回调字段信息:

协议字段 类型 是否必填 说明
result int 返回结果0为成功,非0是失败
fileid String 文件ID
percent Int 完成百分比
msg String 错误描述
fileurl string 返回文件地址

onImSdkLiveImAudioRecognizeResp 回调字段信息:

协议字段 类型 是否必填 说明
result int 返回结果0为成功,非0是失败
errId int 返回的错误id
errMsg string 返回的错误描述
resultInfo string 识别后文本结果
url string 文件上传返回URL

6.7 播放语音文件

6.7.1 调用接口

CLImSdk_playAudio(string url, string filePath, string ext, System.Action playAudio)

接口字段 类型 是否必填 说明
filePath string 播放本地语音路径(url和filePath参数不必两者都传但至少要传入一个)
url string 播放url语音路径
ext string 扩展标记

注:sdk已做缓存处理,播放url语音的时候首先在缓存里查找,如果没有则下载再播放,如果有则直接播放缓存里的语音文件。缓存大于4M会自动删除。

代码示例:

1.CLImSdkApi.Instance.CLImSdk_playAudio(voiceUrl, voicefilepath, “ext”, (msg) =>  
2.         {  
3.             JsonData playAudioData = JsonMapper.ToObject(msg);  
4.             if (JsonHelp.getIntValue(playAudioData, “result”) == 0)  
5.             {  
6.                 labelText = “语音播放完成”;  
7.             }  
8.             else  
9.             {  
10.                   labelText = “语音播放失败”;  
11.               }  
12.               CLImSdkPrint.CLImSdk_Debug(“语音播放完成” + msg);  
13.           }); 

6.7.2 回调接口

ImRecordFinishPlayResp类字段信息:

对象字段 类型 是否必填 说明
result int 播放完成为 0,失败为1
describe string 描述
ext string 扩展标记

6.8 停止播放语音

6.8.1 调用接口

void CLImSdk_stopPlayAudio()
代码示例:
1.CLImSdkApi.Instance.CLImSdk_stopPlayAudio();  

6.9 下载语音文件

6.9.1 调用接口

Void CLImSdk_downloadFileReq(string url,stringfilePath,stringfileid,Action Response)

协议字段 类型 是否必填 说明
url String 下载地址
filePath string 文件路径
fileid string 文件ID

代码示例:
1.CLImSdkApi.Instance.CLImSdk_downloadFileReq(voiceUrl, downLoadFilePath, downLoadfileid, (downLoadmsg) =>  
2.         {  
3.             JsonData downLoad = JsonMapper.ToObject(downLoadmsg);  
4.             if (JsonHelp.getIntValue(downLoad, “result”) == 0)  
5.             {  
6.                 labelText = “下载成功”;  
7.                 CLImSdkPrint.CLImSdk_Debug(“下载成功”);  
8.             }  
9.             else  
10.               {  
11.                   labelText = “下载失败-原因:” + JsonHelp.getStringValue(downLoad, “msg”);  
12.                   CLImSdkPrint.CLImSdk_Debug(“下载失败-原因:” + JsonHelp.getStringValue(downLoad, “msg”));  
13.               }  
14.           });  

6.9.2 回应结果

ImDownLoadFileResp类字段说明:

协议字段 类型 是否必填 说明
result

| int | 是 | 返回结果0为成功,非0是失败 | | msg | String | 是 | 错误描述 | | filename | string | 是 | 文件路径 | | fileid | string | 是 | 文件ID | | percent | int | 是 | 完成百分比 |

6.10 设置语音识别语言

Void CLImSdk_setSpeech_language(int type, int outType)

接口字段 类型 是否必填 说明
type int 1,//中文
 2, //粤语
 3,//英语
outType int = 0,  //简体中文
= 1,  //繁体中文

代码示例:
CLImSdkApi.Instance.CLImSdk_setSpeech_language(1, 0);//设置语音识别文字类型

6.10.1 回应结果

ImSpeechStopResp类字段信息:

协议字段 类型 是否必填 说明
errId int 返回结果0为成功,非0是失败
errMsg string 返回的错误描述
resultInfo
string 识别后文本结果
url string 文件上传返回URL
ext string 扩展标记

6.11 上传语音文件

6.11.1 调用接口

void  CLImSdk_uploadFile(string picPath, string fileId, System.Action uploadFile, System.Action speechStop)

协议字段 类型 是否必填 说明
picPath String 文件路径
fileId string 文件ID(文件返回标示)

代码示例:
1.CLImSdkApi.Instance.CLImSdk_uploadFile(voicefilepath, DateTime.Now.ToFileTime().ToString(), (data1) =>  
2.                {  
3.                    JsonData upLoadData = JsonMapper.ToObject(data1);  
4.                    voiceUrl = JsonHelp.getStringValue(upLoadData, “fileurl”);  
5.                    if (JsonHelp.getIntValue(upLoadData, “result”) == 0)  
6.                    {  
7.                        labelText = “语音上传成功” + data1;  
8.                        CLImSdkPrint.CLImSdk_Debug(“语音上传成功” + data1);  
9.                    }  
10.                      else  
11.                      {  
12.                          labelText = “语言上传失败” + data1;  
13.                          CLImSdkPrint.CLImSdk_Debug(“语言上传失败” + data1);  
14.                      }  
15.                  });  

6.11.2 回应结果

ImUploadFileResp类字段信息:

协议字段 类型 是否必填 说明
result int 返回结果0为成功,非0是失败
msg String 错误描述
fileid string 文件ID
fileurl string 返回文件地址
percent int 完成百分比