生命周期与工具
资源释放与生命周期
releaseChannel()
public func releaseChannel()
说明:
-
释放当前翻译通道与当前会话相关资源。
-
会停止并释放当前通道引擎,取消未完成建房请求,异步关闭当前在线房间,并清理离线模型下载管理器等会话状态。
-
不会清空
sdkInit的全局配置,也不会清空鉴权状态。 -
释放后可以重新创建新通道。
-
在线模式下,如果当前通道绑定了已创建的房间,SDK 会 fire-and-forget 调用关房流程;业务侧不需要再对同一房间重复调用
closeRoom(...)。
destroy()
public func destroy()
说明:
-
释放全局资源。
-
会释放当前通道、清空鉴权状态、清空全局配置、关闭诊断与网络监听。
-
调用后如果要继续使用 SDK,必须重新执行
sdkInit(_:)。
建议
- 页面级退出当前翻译会话时,优先使用
releaseChannel()。 - 应用彻底退出 SDK 使用场景时,再调用
destroy()。
可取消请求句柄
TmkSDKCancellable
public protocol TmkSDKCancellable {
func cancel()
}
说明:
- 用于取消未完成的异步请求,例如语言列表请求、房间关闭请求等。
TmkAnySDKCancellable
public final class TmkAnySDKCancellable: TmkSDKCancellable {
public init(onCancel: @escaping () -> Void)
public func cancel()
}
一般业务方不需要主动创建,通常只需要持有 SDK 返回的 TmkSDKCancellable? 即可。
PCM 工具
TmkTranslationPCMTools 提供常用 PCM 工具方法:
public enum TmkTranslationPCMTools {
public static func mixStereo16LE(left: Data, right: Data) -> Data?
public static func mixMonoToStereo16LE(mono: Data, isLeft: Bool) -> Data?
public static func splitStereoInterleaved16LE(_ stereo: Data) -> (left: Data, right: Data)?
public static func pcm16LEToFloat(_ data: Data) -> [Float]
public static func floatToPCM16LE(_ samples: [Float]) -> Data
}
用途说明:
-
mixStereo16LE(left:right:)- 将左右单声道 PCM 合成为立体声交错 PCM。
-
mixMonoToStereo16LE(mono:isLeft:)- 把单声道复制到左或右声道,生成立体声。
-
splitStereoInterleaved16LE(_:)- 将立体声交错 PCM 拆成左右单声道。
-
pcm16LEToFloat(_:)- 16-bit PCM 转浮点数组。
-
floatToPCM16LE(_:)- 浮点数组转 16-bit PCM。
诊断能力
getDiagnosisDirectoryURL()
public func getDiagnosisDirectoryURL() -> URL?
返回值:
-
诊断目录 URL。
-
如果当前没有诊断目录,返回 nil。
说明:
-
只有在
setDiagnosisEnabled(true)后,SDK 才会产生诊断文件。 -
目录中可能包含日志、诊断音频等排障信息。
-
分享或上传前,建议由业务方确认数据合规。
-
如需上传诊断目录,建议业务侧先完成用户授权、脱敏和访问控制。
诊断数据脱敏
诊断日志可能包含 licenseId、错误码、模型版本、包名和耗时等排障字段;不应包含原始 License、clientSecret、设备私钥或完整用户隐私数据。
示例:
guard let diagnosisURL = TmkTranslationSDK.shared.getDiagnosisDirectoryURL() else {
return
}
print(diagnosisURL)
数据安全与凭据管理
凭据安全
appId/clientSecret是业务鉴权凭据,建议通过独立配置或 CI 注入,避免写入公开仓库。clientSecret会参与本地 License 加密/解密,变更后旧 License 可能无法继续解密。SDK 会尝试重新请求 License;如果设备处于离线状态,业务侧应提示用户联网后重新调用verifyAuth(_:)。- 设备密钥由
tmk-offline组件维护,密钥 tag 通过组件接口获取。业务侧不应硬编码 tag,也不应在 Release 版本调用调试清理能力。