簡體   English   中英

iOS 應用程序如何在后台保持 TCP 連接無限期活動?

[英]How can an iOS app keep a TCP connection alive indefinitely while in the background?

一個 iPhone 應用程序,通過 TCP 連接到遠程服務器。 使用場景有:

  1. 應用程序(用戶)向服務器發送數據,服務器回復數據。
  2. 服務器可能會在不執行任何操作時將數據發送到應用程序。

假設應用程序在 30 分鍾內沒有向服務器發送數據,服務器將關閉連接。 即使用戶什么都不做,我也想讓連接保持 120 分鍾。

案例1:如果應用程序在前台,我可以使用計時器向服務器發送一些無操作數據。 沒問題。

案例2 :如果用戶按下主頁並且應用程序進入后台,我該怎么辦? 我不想顯示警報或打斷用戶的東西(他不在或玩游戲)。 我只想讓連接保持更長時間,當用戶回到應用程序時,他發現連接仍然存在並且對此感到滿意。

我已閱讀有關 iphone API 的后台執行、多任務處理和本地通知的文檔。 我不確定是否可以實現 Case 2

只使用合法的 API,不越獄。

Tapbots 通過提示用戶始終運行無聲背景音軌,使用 Pastebot 解決了這個問題。

請注意,Apple 不贊成使用諸如使用背景音頻或 VOIP API 來保持非音頻或 VOIP 應用程序運行(如上文中描述的“解決方法”所證明的那樣)的黑客行為,因此涉足這些技術可能會在提交時被拒絕。

但不幸的是,沒有合法的 API 可以在后台保持連接活動。 也許他們會在 iOS 的未來更新中引入一個,但您可以考慮提交功能請求以表達您對它的支持。

請查看 Apple 的 iOS 應用程序編程指南中的實現 VoIP 應用程序。 這不是經過測試的解決方案,但我認為它可以用來實現您的要求。

實施 VoIP 應用程序

Internet 協議語音 (VoIP) 應用程序允許用戶使用 Internet 連接而不是設備的蜂窩服務撥打電話。 這樣的應用程序需要保持與其關聯服務的持久網絡連接,以便它可以接收傳入呼叫和其他相關數據。 該系統不是讓 VoIP 應用程序一直處於喚醒狀態,而是允許它們暫停,並為它們提供監控 sockets 的設施。 當檢測到傳入流量時,系統會喚醒 VoIP 應用程序並將其 sockets 的控制權返回給它。

我不確定您是否正在開發 VoIP 應用程序,但您將能夠訪問 sockets 並對傳入的數據包做出反應。 引用后的文本是指[setKeepAliveTimeout:handler:][2] ,它允許您設置一個代碼塊,使您能夠保持(您的 VoIP)連接的活動。 不過,最短調度時間是 10 分鍾。

在實現 VoIP 應用程序中有一段關於安裝 Keep-Alive 處理程序。 我很好奇這是否會有所幫助。 如果這解決了您的問題,請給我們留言。

1.用這樣的VOIP屬性創建你的套接字

[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;

[outputStream  setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType] ;

2.在app.plist中添加所需的后台模式為“App提供Voice over IP服務”

如果您的應用程序處於后台模式,則 voip 套接字將不會關閉。 將此套接字與 uilocal 通知一起使用,您可以獲得。

“如果您的應用程序不是原始 voip 應用程序應用商店將拒絕”

當應用程序在前台時:

看STOMP http://stomp.codehaus.org/Protocol

Obj-C 中的 STOMP 框架http://code.google.com/p/stompframework/

和 ActiveMQ 代理http://activemq.apache.org/

當應用程序在后台時,我可能會 go 使用 APNS(通知)提示用戶喚醒應用程序備份......

暫無
暫無

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

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