在两个正在进行的通话中从应用内 UI 切换到 CallKit UI,其中一个处于保留状态
Switching from in-app UI to CallKit UI during two ongoing calls with one on hold
我正在开发一个 Voip 应用程序并集成了 CallKit。我知道 CallKit UI 不会在有 Voip 来电时显示,但问题是当有一个正在进行的 Voip 呼叫和同时 phone 呼叫(一个保持)时。您可以使用 Whatsapp 测试以下内容。
- 开始 Voip 通话
- 在通话过程中,有人使用非互联网 sim/phone 线路拨打 phone
- CallKit UI 出现,可以选择拒绝、结束或保持 voip 呼叫以接听来电 phone 呼叫
- Select 'hold and answer', callkit UI 显示两个呼叫,voip 呼叫保持
- 通过按交换按钮然后按应用程序图标(在 callkit UI 本身)或按转到主屏幕并单击应用程序图标来返回 Voip 应用程序
- Voip 应用程序显示,顶部有一个绿色条,上面写着 'Touch to return to call',我希望能够在用户点击它时返回到 CallKit UI 屏幕(与 whatsapp 相同)。
如果你在 whatsapp 上测试这个你就会明白我的意思,我想实现同样的行为。
我在这个 post 之后实现了顶部的绿色条:
但是我找不到以编程方式将 CallKit UI 带回前面的方法,post 中的答案没有显示如何。
这个 post 是相似的,但是没有答案,因为对于那种情况,没有其他呼叫处于保留状态,因此不需要将 CallKit 放在前面:
我发现我在 Whosebug 上获得的关于这个主题的信息已经过时了。对于 CallKit 上有多个调用的情况,即使您的应用程序处于前台,绿色条也会显示,因为您的应用程序正在显示状态栏!
以前它没有出现在我的应用程序中,因为我已将状态栏设置为隐藏在正在进行调用的特定页面上...因此解决方案是检测何时将调用设置为保持(通过 callkit 委托)并显示状态栏,并在其中一个通话结束且没有更多通话保持时隐藏状态栏。
当用户在您的应用程序中点击绿色栏时,它会按预期将用户带回 CallKit UI。
先声明变量
var callKitProvider: CXProvider!
var udid = UUID()
然后在结束调用的地方调用这个函数
callKitProvider.reportCall(with: udid, endedAt: Date(), reason: .remoteEnded)
请确保在“报告呼叫”和“来电”中使用相同的 udid
我正在开发一个 Voip 应用程序并集成了 CallKit。我知道 CallKit UI 不会在有 Voip 来电时显示,但问题是当有一个正在进行的 Voip 呼叫和同时 phone 呼叫(一个保持)时。您可以使用 Whatsapp 测试以下内容。
- 开始 Voip 通话
- 在通话过程中,有人使用非互联网 sim/phone 线路拨打 phone
- CallKit UI 出现,可以选择拒绝、结束或保持 voip 呼叫以接听来电 phone 呼叫
- Select 'hold and answer', callkit UI 显示两个呼叫,voip 呼叫保持
- 通过按交换按钮然后按应用程序图标(在 callkit UI 本身)或按转到主屏幕并单击应用程序图标来返回 Voip 应用程序
- Voip 应用程序显示,顶部有一个绿色条,上面写着 'Touch to return to call',我希望能够在用户点击它时返回到 CallKit UI 屏幕(与 whatsapp 相同)。
如果你在 whatsapp 上测试这个你就会明白我的意思,我想实现同样的行为。
我在这个 post 之后实现了顶部的绿色条:
但是我找不到以编程方式将 CallKit UI 带回前面的方法,post 中的答案没有显示如何。
这个 post 是相似的,但是没有答案,因为对于那种情况,没有其他呼叫处于保留状态,因此不需要将 CallKit 放在前面:
我发现我在 Whosebug 上获得的关于这个主题的信息已经过时了。对于 CallKit 上有多个调用的情况,即使您的应用程序处于前台,绿色条也会显示,因为您的应用程序正在显示状态栏!
以前它没有出现在我的应用程序中,因为我已将状态栏设置为隐藏在正在进行调用的特定页面上...因此解决方案是检测何时将调用设置为保持(通过 callkit 委托)并显示状态栏,并在其中一个通话结束且没有更多通话保持时隐藏状态栏。
当用户在您的应用程序中点击绿色栏时,它会按预期将用户带回 CallKit UI。
先声明变量
var callKitProvider: CXProvider!
var udid = UUID()
然后在结束调用的地方调用这个函数
callKitProvider.reportCall(with: udid, endedAt: Date(), reason: .remoteEnded)
请确保在“报告呼叫”和“来电”中使用相同的 udid