Ios UI-won';从后台接收的VOIP呼叫输入我的应用程序时是否显示?
当从一个传入的背景视频呼叫打开应用程序时,我对显示我的UI有点困惑。我正在成功地使iOS在应用程序处于后台时调用默认的“传入视频呼叫”界面,但在呼叫应答后,我的应用程序没有被正确唤醒 当我收到呼叫推送时,我会设置一个CXProvider并通知CallKit有来电:Ios UI-won';从后台接收的VOIP呼叫输入我的应用程序时是否显示?,ios,swift,background,voip,Ios,Swift,Background,Voip,当从一个传入的背景视频呼叫打开应用程序时,我对显示我的UI有点困惑。我正在成功地使iOS在应用程序处于后台时调用默认的“传入视频呼叫”界面,但在呼叫应答后,我的应用程序没有被正确唤醒 当我收到呼叫推送时,我会设置一个CXProvider并通知CallKit有来电: func handleIncomingCallFromBackground() { //These properties are parsed from the push payload before this
func handleIncomingCallFromBackground() {
//These properties are parsed from the push payload before this method is triggered
guard let callingUser = callingUser, roomName != nil else {
print("Unexpected nil caller and roomname (background)")
return
}
let callHandleTitle = "\(callingUser.first_name) \(callingUser.surname)"
let configuration = CXProviderConfiguration.default
let callKitProvider = CXProvider(configuration: configuration)
callKitProvider.setDelegate(self, queue: nil)
let callHandle = CXHandle(type: .generic, value: callHandleTitle)
self.callHandle = callHandle
let callUpdate = CXCallUpdate.default
callUpdate.remoteHandle = callHandle
let callUUID = UUID()
self.callUUID = callUUID
callKitProvider.reportNewIncomingCall(with: callUUID, update: callUpdate) { error in
if error != nil {
self.resetTwilioObjects()
}
}
}
我响应CXProvider的应答调用委托方法,在该方法中,我从服务器获取视频调用的访问令牌,向服务器发送响应以提醒调用方我们已接受该调用,并执行到我们自己的视频调用控制器的切换(这就是jobsVC.showVideoCallVC()的全部功能)它处理通过Twilio房间等连接呼叫。代码如下
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {
guard let customer = callingUser, let callHandle = self.callHandle, let uuid = callUUID, let roomName = roomName else {
resetTwilioObjects()
return
}
self.twilioAPI = TwilioAPI()
self.twilioAPI!.accessToken(room: roomName) { (success, accessToken) in
switch success{
case true:
guard let token = accessToken else {
return
}
let customerID = customer.userID
DispatchQueue.global().asyncAfter(deadline: .now() , execute: {
self.twilioAPI!.postResponse(customerID: customerID, status: 1) { (success) in
if let success = success, !success {
self.resetTwilioObjects()
}
}
})
guard let jobsVC = P_ChildHomeJobsVC.instance else {
print("Jobs VC unexpectedly nil")
return
}
//All this method does is perform a segue, the parameters are stored for later.
jobsVC.showVideoCallVC(callingUser: customer, callHandle: callHandle, callKitProvider: provider, callUUID: uuid, twilioAccessToken: token, roomName: roomName)
action.fulfill()
default:
action.fail()
self.resetTwilioObjects()
}
}
}
根据设备是否锁定,我会得到不同的行为:
- 如果设备被锁定,在点击我的应用图标打开应用程序时,我会看到最新的应用程序屏幕截图,顶部会显示一个绿色条,而不是UI
- 如果设备被解锁,在点击我的应用图标打开应用程序时,什么也不会发生——它会停留在iOS界面上