[英]VoIP, PushKit and app wake up
我正在使用PushKit和CallKit開發VoIP應用程序。 我知道在不同的論壇上經常會問到類似的問題,但遺憾的是從未真正回答過。 此外大部分帖子都是從2015年左右開始的,所以我認為很多機會可能已經改變,有人可能會想到如何讓這個工作。
當應用程序在前台運行或發送到后台時,它會使用沙盒服務器接收推送通知,生產服務器也是如此。
我在iOS 11和Xcode 9上,需要在'功能'中啟用常規推送通知,以及手動將voip后台模式添加到info.plist以便調用委托方法。 單獨鏈接CallKit和PushKit還不足以接收通知。 我還啟用了背景音頻,后台提取和遠程通知。 我還在執行推送注冊表注冊之前創建了一個后台任務,並在收到推送令牌后結束該任務。
重啟后喚醒應用程序或強制退出來電。
我看到這個過程在Instruments活動監視器中的傳入呼叫上啟動但是看起來有些東西從那里起作用,因為我沒有得到來電ui。
-pushRegistry:didReceiveIncomingPushWithPayload:forType:
或者也許(僅) -application:didFinishLaunchingWithOptions:
? 更新:
我自己想出了一個解決方案 這更像是客戶端和服務器之間的時間問題。 所以這對我有用。
同樣重要的是不要太早調用推送通知委托上的完成處理程序,這將使應用程序重新進入休眠狀態,並且永遠不會收到INVITE。
也許有幫助,這將使場景更寬容一些。 如果您的SIP服務器發送邀請幾次,請確保在每個服務器上始終使用最新的注冊信息。 意思是......讓我們說第一個INVITE發送得太早到一些過時的注冊信息,客戶端仍然會啟動嘗試在服務器上更新該信息...確保下一個使用更新的信息。 一些sip服務器只使用每次迭代可用的第一個信息。 因此,如果客戶端沒有收到任何信息,您將永遠等待。
每次啟動應用程序時,都應該實例化PKPushRegistry
實例並設置其委托。 這應該是響應UIApplication
-application:applicationDidFinishLaunching…
回調之一,而不是(例如)在視圖控制器的-viewWillAppear/-viewDidAppear
回調中,因為只有在后台啟動應用程序時才會調用前者。 一些開發人員遇到了錯誤,他們只在視圖控制器或其他代碼路徑中實例化PKPushRegistry
, PKPushRegistry
在應用程序在前台啟動時(即顯示可見的用戶界面時)相關,所以請注意PKPushRegistry
對此對象進行實例化無論是背景還是前景。
創建PKPushRegistry
並分配其委托后,它將有資格接收傳入推送通知有效負載的委托回調,並且您的應用應該能夠處理這些有效負載並處理來電。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.