You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 21:12:37