使用 CallKit 实现通话过程中,出现的错误包含以下几类:
@objc public enum CallBusinessErrorCode: UInt {
case state// 状态错误
case param// 参数错误 主要为呼叫api调用参数错误为空等
case signaling// 信令错误 大多代表信令回复的方法中某些参数错误,代表对方发的信令里缺少某种参数。
case unknown// 未知错误
}- "A call is already in progress"(当前已有通话在进行中)
- "MultiCallParticipantsController is already presented"(多人通话邀请界面已展示,代表重复调用群组通话api)
- "Call already in progress with different group ID"(当前已有通话在进行中,且群组ID不同,代表点击多人通话页面右上角时,呼叫的群组id有误或者中途被其它地方改变)
CallKit 提供通话相关事件监听接口。你可以调用 addListener 设置监听,获取通话相关事件,进行相应处理。
//添加监听
CallKitManager.shared.addListener(self)
extension MainViewController: CallServiceListener {
// 出现错误
func didOccurError(error: CallError) {
// DispatchQueue.main.async {
// self.showToast(toast: "Occur error:\(error.localizedDescription) on module:\(module)")
// }
switch error {//Swift 处理方式
case .im(.invalidURL):
print("Invalid URL")
case .rtc(.invalidToken):
print("Invalid Token")
case .business(.state):
print("State error")
case .business(.param):
print("Param error")
default:
// 注意这里要通过 error.error.message 访问
print("Other error: \(error.error.message)")
}
// switch error.module {//OC 处理方式
// case .im:
// switch error.getIMError() {
// case .invalidURL:
// print("")
// default:
// break
// }
// case .rtc:
// switch error.getRTCError() {
// case .invalidToken:
// print("")
// default:
// break
// }
// case .business:
// switch error.getCallBusinessError() {
// case .state:
// print("")
// case .param:
// print("")
// case .signaling:
// print("")
// default:
// break
// }
// default:
// break
// }
}
// 通话结束原因更新
func didUpdateCallEndReason(message: ChatMessage) {
print("didUpdateCallEndReason: \(String(describing: message.ext))")
NotificationCenter.default.post(name: Notification.Name("didUpdateCallEndReason"), object: message)
}
// 远程用户加入通话
func remoteUserDidJoined(userId: String, uid: UInt, channelName: String, type: CallType) {
}
// 远程用户离开通话
func remoteUserDidLeft(userId: String, uid: UInt, channelName: String, type: CallType) {
}
}- 日志中携带
EaseCallKit Log:的所有内容均为 CallKit 日志。你可以通过查看日志进行代码问题排查。 - 线上获取 SDK 日志,需要设备在登录状态下联系环信技术支持。技术支持获取到线上设备的日志,排查线上用户的问题。