2011-12-19 105 views
1

我的公司爲日間交易者提供iPhone應用程序,基本上告訴他們什麼時候是買或賣的好時機。一羣服務器產生這些BUY和SELL信號,並需要在一分鐘或更短的時間內交付給客戶的iOS設備。對於我們開發的所有其他移動客戶端,我們可以在後臺輪詢服務器(每分鐘一次),以檢查更新。可靠的服務器到iPhone短信

但是,在iOS中,似乎在applicationDidEnterBackground中執行與時間或輪詢相關的任何操作都不是選項。

這讓我看看推送通知,但從我正在閱讀的內容來看,它們並不可靠。他們採用即發即忘方法,但不能保證他們會被收到。

你可以看到這個問題。如果我們發出買入信號並且用戶採取行動,那麼在10分鐘後產生賣出信號並通過推送發送,但從未到達,它們可能會損失很多錢。

那麼,有沒有這樣做的好方法還是我運氣不好?謝謝!

+0

像Colloquy(IRC客戶端)這樣的應用程序可以保持TCP連接打開,雖然也許這是一個選項嗎? –

+0

似乎Colloquy也使用APNS,你能告訴我他們聲稱有一個持續的TCP連接嗎? – Submerged

+0

對於詢問MMS消息是否是一個選項的人(然後刪除了)我不得不說沒有,我不認爲彩信或短信比推送通知更可靠 – Submerged

回答

1

您的服務器和用戶設備之間有兩個中介:a)Apple和b)網絡。

Apple不保證提供所有通知;只有最近的時間才能到達,只有一段時間。有關更多信息,請查看Apple Push Notification Service中的「服務質量」部分。

如果設備通過移動運營商訪問網絡,事情可能會變得很糟糕。我遇到過一些情況,有些通知直到很晚纔到,有些完全丟失。根據我的經驗,運營商可以保護他們自己的服務質量,而不是像蘋果這樣的第三方。 SMS/MMS通常不會丟失,而推送通知可能會失敗。

投票服務器將是一個可行的替代您的應用程序。唉,Apple不允許網絡操作發生在已經處於後臺狀態的應用程序(報亭下載和VoIP除外)。

+1

這是我懷疑的 - 這真的太糟糕了,沒有更好的選擇。我希望所有人都能在將來使用後臺進程,但是有了規則,這樣就不會被濫用。 – Submerged

+0

如果您發現「僅限最新版本」是一種限制,則可以在服務器上保留一份通知列表,以便應用程序在啓動時進行檢查。 – Greg

0

嘗試使用蘋果自己的推送通知服務:http://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html

這是很容易實現的,與應用程序只需要幾行代碼和服務器做送就有點PHP和JSON的。好處是您的服務器將請求發送給Apple,並且Apple自己的服務器可安全可靠地處理交付給設備。通知通常在發送後10秒內發送(除非設備處於脫機狀態,則在設備聯機時將發送通知)。

根據我對推送通知的體驗,我沒有丟失一個推送通知,並且有一個交付選項可以不斷嘗試交付,直到它成功爲止,甚至還有一些可用的服務器端回調API可讓您檢查通知的狀態。您也可以嘗試像Urban Airship這樣的服務來爲您完成這項工作。


您也可以嘗試使用蘋果的background modes之一,因爲這一部分(如接收到「買入」的通知,並安裝了該應用等待在後臺的「賣」。最大的限制是,應用程序一次只能在後臺運行10分鐘左右,因此您必須使用一種解決方法,如在後臺播放音樂(或製作音樂曲目,如音樂曲目; P),或者提示用戶重新打開應用程序繼續後臺會話

+0

我已經實現了APNS和si因爲我們發送了很多,有時候會有新的推送通知發送出去,然後舊的通知被覆蓋。我會檢查城市飛艇。 – Submerged

+0

如果您使用支持的API,您可以確保第一個在**之前得到**,甚至發送下一個,並保持下一個在您的服務器上等待,直到第一個到達。蘋果公司有一個模糊的API,允許進行狀態檢查,城市飛艇有一個不太明顯的API來做同樣的事情。 APNS的架構非常有能力和靈活性,但也很模糊,所以你不能用**做很多事情,你只需要找到解決方法。 – Greg

+0

很高興知道!我會檢查一下。事實上,他們不保證任何事情仍然令我感到擔憂,但我想這是我可用的最佳解決方案。 – Submerged

0

某些應用程序似乎很好地推送通知(GroupMe),而其他應用程序則不會。如果你真的擔心,你可以使用像Twilio這樣的服務向用戶發送帶有鏈接的SMS消息,該鏈接將打開你的應用並提供一些信息。所以短信可以說「賣出售yourapp://股票= APL」或類似的東西。這對於iPod touch用戶或iPad用戶來說顯然不起作用(儘管我不知道這是否會對您造成問題。)