簡體   English   中英

應用程序處於前台/后台/kill 狀態時如何斷開視頻/語音通話 iOS 13. 與 WhatsApp 應用程序相同

[英]How to disconnect the video/voice call when the application is in foreground/background/kill states iOS 13. Same as WhatsApp application

當應用程序處於前台/后台/終止狀態時,我具有斷開視頻/語音呼叫的功能。 與 WhatsApp 應用程序中的語音通話相同

我使用 Callkit 顯示默認傳入 CallKit 屏幕將使用 VOIP 推送觸發。

設想:

  1. 設備 A 呼叫設備 B
  2. 設備A掛斷電話
  3. 設備 B 將在前台而不是在后台斷開連接並終止狀態,因為DidReceiveRemoteNotification委托方法將僅在前台而不是在其他狀態下觸發

嘗試使用靜默推送通知Content-Available = 1並在發送推送有效負載時刪除 Alert 鍵中的值 它仍然沒有在后台工作並殺死 State

現在的問題是我們如何在所有狀態下觸發 DidReceiveRemoteNotification 或者我們是否有任何其他概念來實現此功能。

請提出您寶貴的建議,如果您需要更多信息,請告訴我。

重要的是要了解 CallKit 本身並不處理呼叫連接,也不是所有可能的呼叫狀態,即使它涉及呼叫發起和終止的整個過程。 因此,您經常使用某種形式的 SIP 實現。

無論如何,您必須有一些呼叫連接和音頻/視頻流的實現。
iOS 和 CallKit 不能為您開箱即用地做到這一點。

當您的應用程序通過推送通知收到來電通知時,您的應用程序會通過 SIP 或類似方式收到遠程方掛斷的通知。 不應通過推送通知通知呼叫終止 使用推送通知並沒有那么大的意義,因為無論如何你已經有一個正在進行的呼叫連接。 然后,這種正在進行的連接通常用於發出本地或遠程方正在掛機的信號,這無論如何都是 SIP 的一個特性。

在開始時使用推送通知來通知來電通知而不是持續 SIP 連接的原因是它可以節省電池壽命,而沒有這樣的好處會導致也使用推送通知來發出呼叫終止的信號。 因此,最好不要嘗試使用推送通知來表示呼叫終止,而是使用SIP 的 BYE 消息

然后,您的 SIP 處理代碼應通過 CallKit 通知 iOS,方法是通過 reportCall 報告呼叫結束reportCall(with UUID: UUID, endedAt dateEnded: Date?, reason endedReason: CXCallEndedReason)自行處理實際的呼叫斷開連接

因此,由於 iOS/CallKit 不能也不會處理您的呼叫連接/斷開,因此您必須始終自己執行此操作,或者使用像 PJSIP 這樣的 SIP 庫,這將為您完成大部分工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM