Linphone呼叫转移:如何获取并打印完整SIP地址?
解决Linphone中打印完整SIP地址的问题
你遇到的问题是直接打印linphonesw.Address对象时,Swift默认只输出类名linphonesw.Address,而非完整的SIP地址字符串。Linphone的Address类提供了专门方法获取格式化地址,调用对应方法即可解决。
解决方案
Linphone的Address类有两个核心方法可获取地址字符串:
asStringUriOnly():返回纯SIP URI格式(例如sip:username@domain),不含显示名称asString():返回包含显示名称的完整地址格式(例如"John Doe" <sip:john@domain>),若未设置显示名称,效果与asStringUriOnly()一致
根据你的需求,调用asStringUriOnly()即可得到所需的完整地址。
修改代码
按钮点击事件代码修改
将打印语句替换为调用asStringUriOnly():
ThemeButton(text: "Transfer a Call") { if let selectedIndex = transferCalls.transferNumbers.firstIndex(where: { $0.selected ?? false }) { let selectedTransferNumber = transferCalls.transferNumbers[selectedIndex] if let line = selectedTransferNumber.line { let sipAddressString = "\(line.username ?? "")@\(line.domain ?? "")" do { let remoteAddress = try Factory.Instance.createAddress(addr: "sip:" + sipAddressString) // 调用asStringUriOnly()获取完整SIP地址 print("REMOTE: \(remoteAddress.asStringUriOnly())") phoneManager.transferCall(targetHandle: sipAddressString) } catch { print("Error creating SIP address: \(error)") } } else { print("Selected transfer number does not have a valid UserLine.") } } }
transferCall函数代码修改
同样修改打印语句:
func transferCall(targetHandle: String) { do { guard let currentCall = (mCore.currentCall != nil) ? mCore.currentCall : mCore.calls.first else { print("No active call to transfer.") return } print("Transfer ::: Domain: \(domain)") print("Transfer ::: Target Handle: \(targetHandle)") let remoteAddress = try Factory.Instance.createAddress(addr: "sip:" + targetHandle + "@" + domain) // 调用asStringUriOnly()获取完整SIP地址 print("REMOTE: ———> \(remoteAddress.asStringUriOnly())") try currentCall.transferTo(referTo: remoteAddress) } catch { print("Transfer Call Error: \(error)") } }
内容的提问来源于stack exchange,提问作者Saladel
相关产品推荐
相关产品推荐

