【问题标题】:How to end a call in CallKit如何在 CallKit 中结束通话
【发布时间】:2016-11-07 21:23:10
【问题描述】:

这不是一个给我代码的问题,这是一个可行性问题。如果我使用 CallKit 发起电话呼叫,是否也可以以编程方式结束它?

【问题讨论】:

    标签: ios callkit


    【解决方案1】:

    是的,我们可以以编程方式进行,但我们必须为该调用保留 UUID,

    CXEndCallAction *endaction = [[CXEndCallAction alloc] initWithCallUUID:callUUID];
    [cxcallcontrollerobject requestTransaction:[CXTransaction transactionWithActions:@[action]] completion:completion];
    
    
        + (CXTransaction *)transactionWithActions:(NSArray <CXAction *> *)actions { 
            CXTransaction *transcation = [[CXTransaction alloc] init]; 
            for (CXAction *action in actions) { 
               [transcation addAction:action]; 
            } 
            return transcation; 
     }
    

    希望这会有所帮助。

    【讨论】:

    • 我收到错误代码 4,这意味着 UUID 无效。我正在传递我在建立呼叫时使用的相同 UUID。
    • uuid 是如何存储的? NSUserDefaults 或其他方式。你把它转换成整数了吗?(只是为了澄清)
    • 不,我将其作为 appDelegate 中的全局变量
    • 我检查了 UUID 不是 nil 并且生成成功。
    • 获取错误。选择器“transactionWithActions”没有已知的类方法
    【解决方案2】:

    关闭所有调用 (Swift4)

    func endCall(call: UUID) {
    
        let endCallAction = CXEndCallAction(call: call)
        let transaction = CXTransaction(action: endCallAction)
        cxCallController.request(transaction) { error in
            if let error = error {
                print("EndCallAction transaction request failed: \(error.localizedDescription).")
                self.cxCallProvider.reportCall(with: call, endedAt: Date(), reason: .remoteEnded)
                return
            }
    
            print("EndCallAction transaction request successful")
    
        }
    
    }
    

    【讨论】:

    • 嘿,reportCall 方法似乎没有关闭 CallKit UI,它对你有用吗?
    • @vivektakrani guard let uuid = UUID(uuidString: "CallId") else { return } self.cxCallProvider.reportCall(with: uuid, endAt: Date(), reason: .remoteEnded)
    【解决方案3】:

    在 swift 中使用以下代码,uuidCallKit 是我当前通话的 UUID。

    let controller = CXCallController()
    let transaction = CXTransaction(action: 
    CXEndCallAction(call: uuidCallKit))controller.request(transaction,completion: { error in })
    

    【讨论】:

    • 直截了当的答案可以完成这项工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多