Latest0.1.24
Homepagehttps://github.com/hold-my-hand/TransnSDK
LicenseMIT
Platformsios 8.0, requires ARC
FrameworksCoreTelephony, CoreMedia, CoreMotion, AudioToolbox, AVFoundation, CoreData, AdSupport, SystemConfiguration
Authors

专人翻译实时服务云(SDK)接入服务

修改记录

  • 2018年3月21日
日期修改人涉及接口修改内容
3月21日姜政所有2.0.0版本文档

1. 配置相关

1.1 SDK集成

  1. 本sdk支持iOS8.0及以上系统,使用cocoapods集成
    使用 pod 'TransnSDK'即可`

1.2 手动集成

  1. 把TransnSDK.framework和TransnSDK.bundle文件夹拖进工程

  2. 在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:CoreTelephony、CoreMedia、 CoreMotion、AudioToolbox、AVFoundation、CoreData、AdSupport、SystemConfiguration、libxml2.tbd、libc++.tbd、libresolv.thd

  3. buildsetting中的OtherlinkerFlags加-Objc
    buildsetting中的Header search Path加 $(SDKROOT)/usr/include/libxml2$(SDKROOT)/usr/include/libresolv

  4. 本SDK不支持Bitcode,设置Enable Bitcode等于NO

2. 权限设置

2.1 在info.plist中

  1. 将 Privacy – Camera Usage Description添加用来图片翻译
  2. 将 Privacy – Microphone Usage Description 添加用来语音通话
  3. 将 Privacy – Photo Library Usage Description 添加用来图片翻译
  4. 设置后台模式。在 Background Modes里选择 Audio, AirPlay, and Picture in Picture。用来语音通话

3. 登录相关

3.1 登录

简要描述:

  • 呼叫译员前,需要先登录,需要传入用户唯一标识

调用接口:

  • - (void)loginWithUserId:(NSString *)userId completetion:(void (^)(NSError *error))completion
- (void)loginWithUserId:(NSString *)userId
{
if (!userId) {
return;
}
[[TransnSDK shareManger] loginWithUserId:userId completetion:^(NSError *error) {
if (error) {
NSLog(@"transn 登录失败");
} else {
NSLog(@"transn 登录成功");
}
}];
}

//判断是否登录
if (![[TransnSDK shareManger] isLogined])
{
[[TRToast sharedToast] showToast:@"授权失败"];
}

参数:

参数名必选类型说明
userIdstring用户唯一ID,1~32位

3.2 退出登录

简要描述:

  • 被挤下线,被挤下线了,请主动调用loginOut方法,防止自动去登录来回挤

调用接口:

  • - (void)loginOut:(void (^)(NSError *error))completion;
// 退出登录
- (void)loginOut;
{
[[TransnSDK shareManger] loginOut:^(NSError *error) {
if (error) {
NSLog(@"%@", [error description]);
} else {
NSLog(@"退出登录");
}
}];
}

返回参数说明

参数名类型说明
errorNSErrorappID和appSecret不能为空

备注

3. 3 被挤下线

简要描述:

  • 被挤下线,被挤下线了,请主动调用loginOut方法,防止自动去登录来回挤

回调方法:

  • @property (nonatomic, copy) void (^accountOnKickOut)(void);
// 被挤下线.调一下退出登录
[TransnSDK shareManger].accountOnKickOut = ^{
[[TRToast sharedToast] showToast:@"您已经被挤下线"];
[weakSelf loginOut];
};

备注

4. 呼叫译员

4.1 获取支持的语言列表

简要描述:

  • 呼叫译员,需要传源语种和目标语种

调用接口:

  • - (void)getLanguageList:(void (^)(NSArray *langList))completion;
[[TransnSDK shareManger] getLanguageList:^(NSArray *langList) {
weakSelf.langList = [langList mutableCopy];
}];

返回示例

langList是一个Dict数组,Dict包含langIdlangName2个字段

返回参数说明

参数名类型说明
langIdstring语种ID
langNamestring语种对应的中文

备注

4.2 随机呼叫译员

简要描述:

  • 选择语种,呼叫译员,呼叫前请确保授权成功,登录之后需要等待授权

调用接口:
- (void)callTheServerSrcLangId :(NSString *)srcLangId tarLangId :(NSString *)tarLangId flowId :(NSString *)flowId callerName :(NSString *)callerName callerIcon :(NSString *)callerIcon serviceType :(int)serviceType lineType :(int)lineType isWait :(int)isWait extraParams :(NSDictionary *)extraParams completetion :(TIMCompletionBlock)completion;

参数:

参数名必选类型说明
srcLangIdstring语种ID
tarLangIdstring目标语种ID
flowIdstring传入flowId时表示保活,一单结束,想要重连,请直连,重传flowdId没用
callerNamestring用户名称
callerIconstring用户图像地址
serviceTypeint译员类型 1:(直链接// 2:(仅匹配兼职)// 3:(仅匹配专职)// 4:(匹配所有译员 先兼职,10秒后匹配专职)
lineTypeint订单模式 0: 图文聊天 1:语音和图文
isWaitint//是否等待 0不等待 1等待,请传1
extraParamsNSDictionary扩展字段 如 @{@"locationInfo":@"114.409194,30.482325"} 坐标经纬度,经纬度传字符串类型
completionTIMCompletionBlock服务器会返回呼叫是否成功相应信息

返回参数说明

参数名类型说明
errorNSError请求译员失败,基本上是网络问题造成的
resultNSDictionary包含code、flowId2个字段
codeint300000:已经开始分配 300001:所有译员忙碌,此种情况有少数译员,也会派单 300002:没有匹配到符合的译员 300003没有该语种的译员

备注

本SDK所有回调均通过delegate回调,需要设置一个接收回调方法的对象,即[TransnSDK shareManger].chatOrderMangerdelegate对象,用来接收回调方法

4.3 直连译员

简要描述:

  • 如果想要通过译员的ID直连一个译员,请使用此方法

调用接口:
- (void)callTheTranslator :(NSString *)trId srcLangId :(NSString *)srcLangId tarLangId :(NSString *)tarLangId flowId :(NSString *)flowId callerName :(NSString *)callerName callerIcon :(NSString *)callerIcon lineType :(int)lineType extraParams :(NSDictionary *)extraParams completetion :(TIMCompletionBlock)completion;

参数:

参数名必选类型说明
trIdstring译员的ID
srcLangIdstring源语种ID
tarLangIdstring目标语种ID
flowIdstring传入flowId时表示保活,一单结束,想要重连,请直连,重传flowdId没用
callerNameint用户名称
callerIconint用户图像地址
lineTypeint订单模式 0: 图文聊天 1:语音和图文
extraParamsNSDictionary扩展字段 如 @{@"locationInfo":@"114.409194,30.482325"} 坐标经纬度,字符串类型
completionTIMCompletionBlock服务器会返回呼叫是否成功相应信息

返回参数说明

参数名类型说明
errorNSError请求译员失败,基本上是网络问题造成的
resultNSDictionary包含code、flowId2个字段
codeint300000:已经开始分配 300001:所有译员忙碌,此种情况有少数译员,也会派单 300002:没有匹配到符合的译员 300003没有该语种的译员

备注

本SDK所有回调均通过delegate回调,需要设置一个接收回调方法的对象,即[TransnSDK shareManger].chatOrderMangerdelegate对象,用来接收回调方法

5. 即时通信IM消息

5.1(回调)抢单的译员信息

简要描述:

  • 收到抢单的译员信息,此方法最多会被调用6-7次(30秒内),跟viewController的ViewWillAppear差不多,会多次调用,接入端需要做判断,防止重复执行,
  • 本SDK所有回调均通过delegate回调,需要设置一个接收回调方法的对象,即[TransnSDK shareManger].chatOrderMangerdelegate对象,用来接收回调方法

回调接口:

  • - (void)onReceiveTranslatorModel:(TransnTranslatorModel *)translator;
// 通话开始后收到译员属性的消息。30秒内最多7次,同一译员
- (void)onReceiveTranslatorModel:(TransnTranslatorModel *)translator
{
self.callParam.translator = translator;
}

返回参数说明

参数名类型说明
translatorTransnTranslatorModel译员对象

备注

  • 更多返回错误代码请看首页的错误代码描述

5.2(回调)通话建立

简要描述:

  • 派单成功,译员已抢单,译员抢单以此方法为准

  • 本SDK所有回调均通过delegate回调,需要设置一个接收回调方法的对象,即[TransnSDK shareManger].chatOrderMangerdelegate对象,用来接收回调方法

回调方法:

  • - (void)netCallStatusDidconnected
    
    ///派单成功,译员已抢单
  • (void)netCallStatusDidconnected
    {
    //等待抢单倒计时的视图
    if (_callStatusView) {
    [_callStatusView hide];
    }

TLChatViewController vc = [TLChatViewController new];
UINavigationController
nav = (UINavigationController *)[UIApplication sharedApplication].keyWindow.rootViewController;
[nav pushViewController:vc animated:YES];
self.chatVC = vc;
}


####5.3    发送文本消息

**简要描述:**

- 调用TransnSDK shareManger].chatOrderManger对象发送,SDK内部已经初始化

**调用接口:**
- ` - (TransnMessage *)sendTextMessage:(NSString *)text;`

//发送文本消息给对方.只有译员接单了,才会发送出去,译员接通前不会发送.
TransnMessage *message = [[TransnSDK shareManger].chatOrderManger sendTextMessage:text];
if (self.sendMsgAction) self.sendMsgAction(message);


**参数:**

|参数名|必选|类型|说明|
|:----    |:---|:----- |-----   |
|text |是  |string |文本消息   |

**返回参数说明**

|参数名|类型|说明|
|:-----  |:-----|-----                           |
|message |TransnMessage   |消息对象  |

**备注**

####5.4    发送图片消息

**简要描述:**

- 调用TransnSDK shareManger].chatOrderManger对象发送,SDK内部已经初始化

**调用接口:**
- ` - (TransnMessage *)sendImageMessage:(UIImage *)img`

//发送图片消息给对方.译员接通前不会发送,图片SDK未压缩,故调用此方法前,需要自己去压缩一下,不然太大了,可能浪费资源或者影响使用
TransnMessage*message = [[TransnSDK shareManger].chatOrderManger sendImageMessage:image];
if (self.sendMsgAction) self.sendMsgAction(message);


**参数:**

|参数名|必选|类型|说明|
|:----    |:---|:----- |-----   |
|img |是  |UIImage | 图片消息    |

**返回参数说明**

|参数名|类型|说明|
|:-----  |:-----|-----                           |
|message |TransnMessage   |消息对象  |

**备注**

####5.5    发送语音消息

**简要描述:**

- 调用TransnSDK shareManger].chatOrderManger对象发送,SDK内部已经初始化

**调用接口:**
- ` - (TransnMessage *)sendVoiceMessage:(NSString *)filePath voiceSize:(NSString *)voiceSize;`

//发送语音消息给对方.译员接通前不会发送,需传语音文件本地路径、语音时长
TransnMessage *message = [[TransnSDK shareManger].chatOrderManger sendVoiceMessage:voicePath voiceSize:[NSString stringWithFormat:@"%ld",duration]];
if (self.sendMsgAction) self.sendMsgAction(message);


**参数:**

|参数名|必选|类型|说明|
|:----    |:---|:----- |-----   |
|filePath     |是  |string | 语音消息    |
|voiceSize     |是  |string | 语音时长,秒,传字符串    |

**返回参数说明**

|参数名|类型|说明|
|:-----  |:-----|-----                           |
|message |TransnMessage   |消息对象  |

**备注**

####5.6    重发消息

**简要描述:**

- 重新发送消息.译员接通前不会发送

**调用接口:**
- ` - (void)reSendMessage:(TransnMessage *)message; `

[[TransnSDK shareManger].chatOrderManger reSendMessage:message];


**参数:**

|参数名|必选|类型|说明|
|:----    |:---|:----- |-----   |
|message |是  |TransnMessage |消息对象   |

**备注**

####5.7(回调)发送消息状态

**简要描述:**

- 此message对象和之前发送的message对象内存地址不一样,通过和之前发送的message通过messageId比较,如果一样则是同一条消息,

- 如果是图片消息,在消息发送完成之后,此message对象的image为nil,之前发送的message对象的image不为nil,调用者可以置为nil,可以减少内存消耗

- 本SDK所有回调均通过delegate回调,需要设置一个接收回调方法的对象,即`[TransnSDK shareManger].chatOrderManger`的`delegate`对象,用来接收回调方法

**回调接口:**
- ` - (void)sendMessage:(TransnMessage *)message didCompleteWithState:(TIMMessageSendState)state; `
  • (void)sendMessage:(TransnMessage )message didCompleteWithState:(TIMMessageSendState)state
    {
    for (TransnMessage
    msg in self.messages) {
    if( [msg.messageID isEqualToString: message.messageID])
    {
    NSLog(@"这2个message不一样了 %@ ,%@ ",@(message.sendState),@(state));
    msg.sendState = state;
    dispatch_async(dispatch_get_main_queue(), ^{
    [self.chatTableView reloadRowsAtIndexPaths:self.chatTableView.indexPathsForVisibleRows withRowAnimation:UITableViewRowAnimationNone];
    });
    return;
    }
    }
    }

备注

  • 更多返回错误代码请看首页的错误代码描述

6.0 语音通话相关

6.1 (回调)语音通话连接成功

简要描述:

  • 语音通话连接成功

回调接口:

  • - (void)voiceConnected;
///语音通话连接成功
- (void)voiceConnected
{
NSLog(@"%s", __func__);
self.callParam.callType = CallType_Voice;
[CallingView sharedInstance].status = CallStatus_Connected;
}

备注

6.2(回调)语音通话连接断开

简要描述:

  • 语音通话连接断开

回调接口:

  • - (void)voiceDisconnected;
///语音通话连接断开
- (void)voiceDisconnected
{
NSLog(@"%s", __func__);
self.callParam.callType = CallType_ImageText;
[CallingView sharedInstance].status = CallStatus_ConnectHuangUp;
}

备注

6.3 是否正在语音通话

简要描述:

  • 是否跟译员正在语音通话

调用接口:

  • - (BOOL)isContectTranslatorWithVoice;
BOOL isContectTranslatorWithVoice = [[TransnSDK shareManger].chatOrderManger.currentOrder isContectTranslatorWithVoice];
if (isContectTranslatorWithVoice) {
[[TRToast sharedToast] showToast:@"已经在语音通话中"];
}

返回参数说明

参数名类型说明
isContectTranslatorWithVoiceinttrue:是 false:否

备注

6.4 是否可以切换语音

简要描述:

  • 如果在15秒内连续切换,就不能,其它就可以

调用接口:

  • -(BOOL)canSwitchVoice;
// 从图文翻译切换到实时语音翻译
// 从图文翻译切换到实时语音翻译
- (void)contectTranslatorWithVoice
{
BOOL isContectTranslatorWithVoice = [[TransnSDK shareManger].chatOrderManger.currentOrder isContectTranslatorWithVoice];

if (isContectTranslatorWithVoice) {
[[TRToast sharedToast] showToast:@"已经在语音通话中"];
} else if (![TransnSDK shareManger].chatOrderManger.canSwitchVoice) {
[[TRToast sharedToast] showToast:@"操作太平凡,请稍后再试"];
} else {
int returnValue = [[TransnSDK shareManger].chatOrderManger.currentOrder contectTranslatorWithVoice];

if (returnValue == 0) {
[CallingView sharedInstance].status = CallStatus_Normal;
} else if (returnValue == 9000) {
[[TRToast sharedToast] showToast:@"操作太平凡,请稍后再试"];
} else {
[[TRToast sharedToast] showToast:@"开启语音通话失败"];
}
}
}

备注

6.5 IM转语音

简要描述:

  • 文字聊天转实时语音,如果是直接语音呼叫译员,则不需调用此方法.
  • 与译员进行语音通话,此功能的场景是先跟译员保持IM会话,然后可以转成实时语音,并且保持IM会话

调用接口:

  • - (int)contectTranslatorWithVoice;
// 从图文翻译切换到实时语音翻译
- (void)contectTranslatorWithVoice
{
if ([[TransnSDK shareManger].chatOrderManger.currentOrder isContectTranslatorWithVoice]) {
[[TRToast sharedToast] showToast:@"已经在语音通话中"];
} else {
int returnValue = [[TransnSDK shareManger].chatOrderManger.currentOrder contectTranslatorWithVoice];
if (returnValue == 0) {
[CallingView sharedInstance].status = CallStatus_Normal;//成功
} else if (returnValue == 9000) {
[[TRToast sharedToast] showToast:@"操作太平凡,请稍后再试"];
} else {
[[TRToast sharedToast] showToast:@"开启语音通话失败"];
}
}
}

返回参数说明

参数名类型说明
returnValueint0:请求成功,调用语音开始后者结束之后,15秒钟之后才能再调用此方法 9000:表示点击的太频繁,请15秒钟之后再点击

备注

6.6 语音转IM

简要描述:

  • 断开与译员进行的语音通话,断开之后,会保留IM会话,如果要直接结束订单,请调用hangupCurrentCall方法,不必调用此方法

请求接口:

  • - (int)disContectTranslatorWithVoice;
[CallingView sharedInstance].hungUpBlock = ^(id data) {
//挂断语音
int returnValue = [[TransnSDK shareManger].chatOrderManger.currentOrder disContectTranslatorWithVoice];
if (returnValue == 0) {
[[TRToast sharedToast] showToast:@"语音通话结束"];
}else if(returnValue==9000){
[[TRToast sharedToast] showToast:@"操作太平凡,请稍后再试"];
}else{
[[TRToast sharedToast] showToast:@"挂断语音通话失败"];
}
};

返回参数说明

参数名类型说明
returnValueint0:请求成功,调用语音开始后者结束之后,15秒钟之后才能再调用此方法 9000:表示点击的太频繁,请15秒钟之后再点击

备注

6.7 设置静音

简要描述:

  • 是否开启静音
  • 切换网络通话类型将丢失该设置

调用接口:

  • - (void)setMute:(BOOL)mute;
- (IBAction)muteAction:(UIButton *)sender{
sender.selected = !sender.isSelected;
[[TransnSDK shareManger].chatOrderManger setMute:sender.selected];
}

返回参数说明

参数名类型说明
muteBOOL是否开启静音, YES:静音. NO:不静音

备注

6.8 设置通话扬声器模式

简要描述:

  • 是否开启扬声器
  • 切换订单类型将丢失该设置

调用接口:

  • - (void)setSpeaker:(BOOL)useSpeaker;
- (IBAction)speakerAction:(UIButton *)sender
{
sender.selected = !sender.isSelected;
[[TransnSDK shareManger].chatOrderManger setSpeaker:sender.selected];
}

返回参数说明

参数名类型说明
useSpeakerBOOL是否开启扬声器,YES:开启扬声器;NO:关闭扬声器

备注

6.9(回调)语音通话中的网络状态

简要描述:

  • 网络状态.2秒返回一次

回调接口:

  • - (void)onCallNetStatus:(NetCallNetStatus)status;
////网络状态.2秒返回一次
- (void)onCallNetStatus:(NetCallNetStatus)status;
{
NSLog(@"%s,%@",__func__,@(status));
}

返回参数说明

参数名类型说明
statusNetCallNetStatus网络通话的网络状态. NetCallNetStatusVeryGood:非常好. NetCallNetStatusGood:好. NetCallNetStatusBad:差. NetCallNetStatusVeryBad:非常差

备注

7. 译员相关

7.1 获取明星译员

简要描述:

  • 获取明星译员

调用接口:

  • - (void)requestRecommendTranslator:(NSString *)sourceLangId destLangId:(NSString *)destLangId completetion:(void (^)(NSArray <TransnTranslatorModel *> *translators, NSError *error))completion;

参数:

参数名必选类型说明
sourceLangIdstring源语种ID
destLangIdstring目标语种ID

返回示例

[[TransnSDK shareManger] requestRecommendTranslator:self.srcLangId destLangId:self.tarLangId completetion:^(NSArray <TransnTranslatorModel *> *translators, NSError *error) {
if (error) {} else {
if (translators.count) {
NSLog(@"%@", translators.firstObject.mj_keyValues);
BOOL needOnlineStatus = YES;

if (needOnlineStatus) {
[self getFormList:translators OnLineTrs:^(NSArray *onlineTrs) {
[self.onLineTrs addObjectsFromArray:onlineTrs];
[self.sourceArray addObjectsFromArray:translators];
[self.tableView reloadData];
}];
} else {
[self.sourceArray addObjectsFromArray:translators];
[self.tableView reloadData];
}
}
}
}];

返回参数说明

参数名类型说明
translatorsNSArray <TransnTranslatorModel *>译员数组
errorNSError错误信息

备注

7.2 获取译员在线状态

简要描述:

  • 通过译员ID拼接字符串获取译员状态,

调用接口:

  • - (void)getTranslatorsStatus:(NSString *)translators result:(void (^)(NSArray *results))block;
参数名必选类型说明
translatorsstring译员ID字符串 ID1,ID2,ID3…以逗号分隔

返回示例

{
"result":"1",
"data":
{
"list" :
[
{
"translatorId":"id1",  //离线
"status":"TR_OFFLINE",  //离线
},
{
"translatorId":"id2",  //离线
"status":"TR_ONLINE",  //在线
} ,
{
"translatorId":"id3",  //离线
"status":"TR_BUSY",  //忙碌
}
]
}
}

返回参数说明

参数名类型说明
resultsNSArray在线状态数组

备注

7.3 评价译员

简要描述:

  • 只能对译员的某一单进行评价

调用接口:

  • - (void)evaluateOrder:(NSString *)flowId comment:(NSString *)comment star:(int)star completetion:(TIMCompletionBlock)completion;

请求方式:

  • POST

参数:

参数名必选类型说明
flowIdstring订单标识
commentstring评价内容
starint评分
- (IBAction)commit:(id)sender
{
[[TransnSDK shareManger].chatOrderManger evaluateOrder:[CallManager shareManager].callParam.flowId comment:self.textV.text star:self.starRatingV.value completetion:^(id result, NSError *error) {
if (error) {
[[TRToast sharedToast] showToast:error.description];
} else {
[[TRToast sharedToast] showToast:@"提交成功"];
}
}];
[self.navigationController popToRootViewControllerAnimated:YES];
}

备注

7.4 通过语种查看在线译员

简要描述:

  • 通过语种查看在线译员

调用接口:

  • - (void)requestTranslator:(NSString *)sourceLangId destLangId:(NSString *)destLangId completetion:(TIMCompletionBlock)completion;

请求方式:

[[TransnSDK shareManger] requestTranslator:self.srcLangId destLangId:self.tarLangId completetion:^(id result, NSError *error) {
if (error) {
self.transnerL.text = @"请求失败";
self.transnerL.textColor = [UIColor colorWithHex:0xfe7f19];
self.resourceState = @"";
} else {
NSDictionary *data = result[@"data"];
self.resourceState = data[@"resource_state"];

if ([self.resourceState isEqualToString:@"adequate"]) {
self.transnerL.text = @"译员充足,响应神速";
self.transnerL.textColor = [UIColor whiteColor];
} else if ([self.resourceState isEqualToString:@"absent"]) {
self.transnerL.text = @"抱歉,译员们都不在-_-||";
self.transnerL.textColor = [UIColor colorWithHex:0xfe7f19];
} else if ([self.resourceState isEqualToString:@"busy"]) {
// 空闲的译员数1-3个,则显示这种状态,可以呼叫
self.transnerL.text = @"译员都好忙,呼叫后需稍等";
self.transnerL.textColor = [UIColor colorWithHex:0xffe270];
}
}

self.transnerL.hidden = NO;
self.aiv1.hidden = YES;
[self.aiv1 stopAnimating];
}];

参数:

参数名必选类型说明
sourceLangIdstring源语种,多个标签,用逗号分隔
destLangIdstring目标语种

返回参数说明

{
data =     {
"resource_state" = absent;
};
result = 1;
}

返回参数说明

参数名类型说明
resource_statestring译员状态 adequate:译员充足,响应神速; absent:抱歉,译员们都不在-_-; busy: 译员都好忙,呼叫后需稍,这种状态,表示空闲的译员数1-3个,可以呼叫
resultint1:调用成功,0:调用失败

备注

8. 结束通话

8.1 挂断或者取消当前订单

简要描述:

  • 无论是文本翻译还是语音通话翻译都需要调用接口挂断
  • 只要是调用了呼单的方法,一定要调用此方法

调用接口:

  • -(void)hangupCurrentCall
//取消订单
- (void)didCancelCall
{
[[TransnSDK shareManger].chatOrderManger hangupCurrentCall];
NSLog(@"取消呼叫时,一定要置delegate为nil");
[TransnSDK shareManger].chatOrderManger.delegate = nil;
}
- (void)popViewcontroller
{
UIAlertController   *alert = [UIAlertController alertControllerWithTitle:@"结束订单?" message:nil preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction       *action1 = [UIAlertAction actionWithTitle:FLString(@"确定") style:UIAlertActionStyleDefault handler:^(UIAlertAction *_Nonnull action) {
if ([CallManager shareManager].callParam.callType == CallType_Voice) {
[[CallingView sharedInstance] windowButtonHide];
}

[[TransnSDK shareManger].chatOrderManger hangupCurrentCall];
NSLog(@"订单总时长:%@", @([TransnSDK shareManger].chatOrderManger.currentOrderTime));
// 去聊天记录页面
[self forChatRecord];
}];

[alert addAction:action1];

UIAlertAction *action2 = [UIAlertAction actionWithTitle:FLString(@"取消") style:UIAlertActionStyleCancel handler:^(UIAlertAction *_Nonnull action) {}];
[alert addAction:action2];
[self presentViewController:alert animated:YES completion:nil];
}

返回参数说明

参数名类型说明
groupidint用户组id,1:超级管理员;2:普通用户

备注

  • 更多返回错误代码请看首页的错误代码描述

9 获取聊天记录

9.1 通过flowId查询云端的聊天记录

简要描述:

  • 通过flowId查询云端的聊天记录

调用接口:

  • - (void)getTransnCloudMesssagesByFlowId:(NSString *)flowId result:(void (^)(NSArray <TransnMessage *> *messages, TransnTranslatorModel *translator, NSString *userId))block;
- (void)getCloudMessages
{
self.title = @"单条订单的聊天记录";
[[TransnSDK shareManger] getTransnCloudMesssagesByFlowId:self.flowId result:^(NSArray <TransnMessage *> *messages, TransnTranslatorModel *translator, NSString *userId) {
if (messages.count) {
[self.messages removeAllObjects];
[self.messages addObjectsFromArray:messages];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}
}];
}

参数:

参数名必选类型说明
flowIdstring订单ID

返回参数说明

参数名类型说明
messagesNSArray <TransnMessage *>消息数组
translatorTransnTranslatorModel译员对象
userIdstring登录SDK的用户ID

备注

9.2 单条订单的聊天记录

简要描述:

  • 获取每一个订单的消息

调用接口:

  • ` – (void)selectMessagesByFlowId:(NSString )flowId result:(void (^)(NSArray <TransnMessage > *messages))block;
  • `
self.title = @"单条订单的聊天记录";
[[TransnSDK shareManger] selectMessagesByFlowId:self.flowId result:^(NSArray <TransnMessage *> *list) {
strongifySelf;
[self.messages addObjectsFromArray:list];
[self.tableView reloadData];
}];

参数:

参数名必选类型说明
flowIdstring订单ID

返回参数说明

参数名类型说明
messagesNSArray <TransnMessage *>消息数组

备注

9.3 用户与该译员的聊天记录

简要描述:

  • 默认返回当前登录SDK的用户和该译员之间所有的消息

调用接口:

  • - (void)selectMessagesByTranslatorId:(NSString *)translatorId result:(void (^)(NSArray <TransnMessage *> *messages))block;
self.title = @"我与该译员的聊天记录";
[[TransnSDK shareManger] selectMessagesByTranslatorId:self.translatorId result:^(NSArray <TransnMessage *> *list) {
strongifySelf;
[self.messages addObjectsFromArray:list];
[self.tableView reloadData];
}];

参数:

参数名必选类型说明
translatorIdstring译员ID

返回参数说明

参数名类型说明
listNSArray <TransnMessage *>消息数组

备注

  • 更多返回错误代码请看首页的错误代码描述

Latest podspec

{
    "name": "TransnSDK",
    "version": "0.1.24",
    "summary": "u4e13u4ebau7ffbu8bd1u5b9eu65f6u670du52a1u4e91uff08SDKuff09u63a5u5165u670du52a1",
    "description": "TODO: Add long description of the pod here.",
    "homepage": "https://github.com/hold-my-hand/TransnSDK",
    "license": "MIT",
    "authors": {
        "Transn": "[email protected]"
    },
    "source": {
        "git": "https://github.com/hold-my-hand/TransnSDK.git",
        "tag": "0.1.24"
    },
    "platforms": {
        "ios": "8.0"
    },
    "frameworks": [
        "CoreTelephony",
        "CoreMedia",
        "CoreMotion",
        "AudioToolbox",
        "AVFoundation",
        "CoreData",
        "AdSupport",
        "SystemConfiguration"
    ],
    "vendored_frameworks": "TransnSDK.framework",
    "requires_arc": true,
    "xcconfig": {
        "HEADER_SEARCH_PATHS": "$(SDKROOT)/usr/include/libxml2 $(SDKROOT)/usr/include/libresolv",
        "CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES": "YES",
        "OTHER_LDFLAGS": [
            "-lObjC"
        ]
    },
    "libraries": [
        "xml2",
        "resolv",
        "c++"
    ],
    "resources": "TransnSDK.bundle"
}

Pin It on Pinterest

Share This