版权申明
本文档包含了来自上海璟梦信息科技有限公司信息科技有限公司的机密技术和商业信息,这些信息作为上海璟梦信息科技有限公司信息科技技术有限公司专用。接受本文档即视为表示同意对其内容保密,并且未经上海璟梦信息科技有限公司信息科技有限公司书面许可,不得复制、泄露或散布本文档的全部或部分内容。
本文档及其描述的内容及产品的著作权和版权受有关法律保护,对本文档内容的任何形式的非法复制,泄露或散布,将导致承担相应的法律责任。
上海璟梦信息科技有限公司信息科技有限公司保留在不另行通知的情况下修改本文档的权利,并保留对本文档内容的全部解释权。
修订历史
日期 | 版本 | 说明 |
---|---|---|
2015-05-09 | 1.0.0 | 文档起草 |
2016-06-07 | 2.0.1 | 优化接口 |
2020-11-01 | 502 | 优化SDK性能 |
本文档发布于上海璟梦信息科技有限公司信息科技有限公司技术部、产品部及此项目合作公司相关人员。本文档不属于客户契约性文档,不能发布予客户。
术语 | 定义 |
---|---|
appId | 应用编号(需向CL申请获取) |
提供APP或游戏名称、包名和公司名称等信息。在sdk对接交流群@CL语音相关对接人既可。
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”);
}
}
<!-- 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" />
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, false, false, false, (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. });
Void CLImSdk_Binding(stringtt, stringgameServerID, string[] wildCard, intreadStatus, System.Action
接口字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
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. });
ImThirdLoginResp类字段信息:
对象字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
result | int | 是 | 返回结果0为成功,非0是失败 |
msg | string | 是 | 错误描述 |
userId | int | 是 | CLID |
nickName | string | 是 | 昵称 |
thirdUserId | string | 是 | 第三方用户ID |
thirdUseName | string | 是 | 第三方用户名 |
CLImSdkApi.Instance.CLImSdk_LogOut();
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);
void CLImSdk_stopAudioRecord(System.Action
代码示例:
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. );
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 |
CLImSdk_playAudio(string url, string filePath, string ext, System.Action
接口字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
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. });
ImRecordFinishPlayResp类字段信息:
对象字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
result | int | 是 | 播放完成为 0,失败为1 |
describe | string | 是 | 描述 |
ext | string | 否 | 扩展标记 |
void CLImSdk_stopPlayAudio()
代码示例:
1.CLImSdkApi.Instance.CLImSdk_stopPlayAudio();
Void CLImSdk_downloadFileReq(string url,stringfilePath,stringfileid,Action
协议字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
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. });
ImDownLoadFileResp类字段说明:
协议字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
result |
| int | 是 | 返回结果0为成功,非0是失败 | | msg | String | 是 | 错误描述 | | filename | string | 是 | 文件路径 | | fileid | string | 是 | 文件ID | | percent | int | 是 | 完成百分比 |
Void CLImSdk_setSpeech_language(int type, int outType)
接口字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
type | int | 是 | 1,//中文 2, //粤语 3,//英语 |
outType | int | 是 | = 0, //简体中文 = 1, //繁体中文 |
代码示例:
CLImSdkApi.Instance.CLImSdk_setSpeech_language(1, 0);//设置语音识别文字类型
ImSpeechStopResp类字段信息:
协议字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
errId | int | 是 | 返回结果0为成功,非0是失败 |
errMsg | string | 是 | 返回的错误描述 |
resultInfo |
string | 是 | 识别后文本结果 |
url | string | 否 | 文件上传返回URL |
ext | string | 否 | 扩展标记 |
void CLImSdk_uploadFile(string picPath, string fileId, System.Action
协议字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
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. });
ImUploadFileResp类字段信息:
协议字段 | 类型 | 是否必填 | 说明 |
---|---|---|---|
result | int | 是 | 返回结果0为成功,非0是失败 |
msg | String | 是 | 错误描述 |
fileid | string | 是 | 文件ID |
fileurl | string | 是 | 返回文件地址 |
percent | int | 是 | 完成百分比 |