2012-08-10 64 views
9

幾個星期前,通過蘋果指導方針閱讀,它說應用程序應該在嘗試建立連接之前檢查可達性狀態,並且我已經閱讀了應用程序被拒絕從應用程序商店未執行此操作。在互聯網連接之前檢查可達性的要點是什麼?

然而,可達性API可能需要長達30秒(根據Apple文檔,並且我也有時會看到這種情況),以確定是否有可用性。在這種情況下,API返回不可訪問。

因此,您可以確定您確實具有可達性的情況,但API表示您不知道,並且在30秒左右時間內無法找到您。

不得不等待30秒是無法接受的長 - 特別是如果連接已經由用戶發起。考慮這種情況:

  • 用戶點擊一些按鈕,執行一些互聯網相關的活動
  • 按照代碼使用可達性API來檢查是否有嘗試進行連接之前可達蘋果準則。
  • Reachability API表示沒有可達性(但實際上存在),所以代碼告訴用戶沒有連接(在處理過程中將其混淆)
  • 30秒後,Reachability API現在會通知代碼是可達性
  • 但它太晚了,因爲用戶已退出應用程序並去其他地方,因爲他們厭倦了等待。

通過遵循Apple的指導方針,首先檢查可達性,確實有可能導致絕對糟糕的用戶體驗,並且應用程序在完成時未與服務器聯繫。

這似乎很荒謬,當然我錯過了什麼?

您如何遵循Apple的指導方針,同時還能提供響應式應用程序?

我在Reacability API中遇到過這些延遲,並且想要拋棄它 - 因爲我已經看到它說沒有可達性的場合,但如果你嘗試了,所以我希望我的應用程序嘗試連接無論如何,無論API說什麼。但是如果我這樣做,那麼應用程序有可能被拒絕?

有沒有解決這個困境的方法?

回答

6

我毫不猶豫地回答這個,因爲它變成了一場火焰戰。 答案 - 可達性不起作用。在後臺線程上花費很長時間的事實根本無關緊要。

它的一個更大的問題是,它說你不具備可達性,當你這樣做時,它說你做的事實上你沒有。這是關鍵。

蘋果不拒絕沒有使用可達性的應用。他們拒絕那些無法處理從3G網絡切換到無線網絡和應用程序的應用程序,以及無法正確處理丟失連接的應用程序。

應用程序無法正常ping可靠的後端,考慮超時和重試而不管可達性,並在連接失敗時通知用戶將被拒絕。

在網絡上拔插頭時鎖定的應用程序將被拒絕。

儘管蘋果一直試圖給予幫助和明確,但他們提供的代碼並不是他們自己使用的代碼,並不足夠。

您作爲應用程序開發人員離開,以使其適用於上述拒絕情形。

就是這樣。所以忘記Apple的可達性和simplePing。

運行您的應用程序,請求發生時終止網絡。它掛了嗎?失敗。 當請求沒有發生時(但可能會很快),請拔出網絡,您是否通知用戶?

這就是由於網絡問題導致的整個應用程序拒絕。

不要抱怨從未工作過的東西。儘管我希望這是蘋果問題,但是我的代碼太長了,我在代碼上花了太長時間纔將它在StackOverflow上給出。

問問你自己,我是否ping了一個可靠的後端?

我在做一個線程嗎?

我是否計時超時線程?

我是否反應過度前重試?

它很容易,但是再次,它不是。

5

我認爲你正在服用蘋果有點吃不消通過他們的話......

什麼HIG實際嘗試表達的是一個應用程序應該預料到有,即使它需要一個連接沒有任何連接。

因此,應該優雅地告訴用戶連接需要激活。

我們通常所做的只是嘗試連接到應用程序的服務,如果失敗,我們會通知用戶啓用連接。

使用可達性 API 不是強制性的