2016-12-06 89 views
-1

因此,我的應用從我不控制的服務器中提取JSON,並解析該JSON以填充UITableView自動刷新JSON

我想更新我的UITableView以實時反映服務器上的最新信息。所以無論何時在服務器上發生變化,我的UITableView也會得到更新。

現在想到的一個解決方案是持續發送GET請求讓我們說一分鐘後,解析JSON並重新載入表上的數據。

但是,這個問題必須有其他解決方案。我試圖尋找,但迄今沒有成功。

現在我明白這個問題是有點主觀的由stackoverflow的標準,但真的我需要幫助有關此事,我還沒有絲毫的線索,從哪裏開始。所以任何幫助將不勝感激。

+2

最簡單的方法是使用計時器。如果實時性很重要,請使用[socket](https://github.com/socketio/socket.io-client-swift)而不是http連接。 – Ryan

+0

你可以參考我的答案解決方案:http://stackoverflow.com/a/41002245/3077339 –

+0

但我不想使用計時器和服務器不在我的控制,所以我不能發送推送通知 –

回答

3

重複的GET通常是不被接受的,因爲當大部分時間都沒有發生時,它會要求客戶端和服務器資源。

既然你不控制的服務器,我建議建立你控制,可以進行輪詢,然後在檢測到變化發送推送服務器。與客戶投票相比,這有兩個優勢:它的規模更好,因爲世界上只有一個投票來源,而且它保存了客戶端的能量以及純粹的推送方法。

Apple provides a push system (APNS)其中您的服務器將消息發送到您的iOS設備(通過Apple)。該設備將在後臺啓動您的應用,並調用:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo; 

對您的應用程序委託。

+0

準確地說,我不想重複GET,問題是我沒有自己的服務器,所以我不能真正發送消息從服務器 –

+0

錯過了。請參閱編輯。 – danh

+0

這可能是最佳解決方案。只需在你的應用程序中做一個故障轉移選項:如果用戶不批准推送通知,那麼你可能想要在每個應用程序(你可能想這樣做),然後每15'左右 - 如果這是有道理的......取決於人們如何使用你的應用程序:他們啓動它,然後盯着它兩個小時?大多數情況下,在每個'applicationDidBecomeActive:'和可選的「下拉刷新」刷新(因爲你使用的是UITableView這將是一個10-liner ......)已經綽綽有餘了...... –

0

正如上面的答案所述,它更好地使用APNS。 但是,如果你真的不控制服務器,那麼就像你描述的那樣,除了輪詢之外你什麼也做不了。由於您正在爲iOS編寫代碼,因此建議您考慮以下幾點:

  • Wifi約束:您是否獲取了微小的有效載荷,以至於無論您使用的是WiFi嗎?否則你應該配置可達性而不是對用戶蜂窩服務的拖拽。
  • 後臺會話&後臺執行:考慮使用NSBackgroundUrlSession請求此數據。後臺會話對操作系統來說效率更高一些,因爲它們允許操作系統以機會方式執行請求。如果您需要爲後臺會話自定義NSURLSessionTasks,請考慮後臺執行權利。
  • 可伸縮性:您的後端能否處理來自您的用戶量的連續請求?
  • 更好的解決方案可能利用APNS,或插座/的WebSockets/Socket.io /火力/等
0

普通靜音通知是當你添加服務器上的任何新項目此

最佳解決方案那時您可以向設備發送推送通知(無提示推送通知),以通知您在服務器端添加了某些內容。

當設備收到這樣的推送通知時,您必須調用API並重新加載您的表視圖。所以你不必每10秒重新加載tableview。

它「不會出現在通知欄通知警報,但它只會通知您的應用程序,有一些新的數據可用的,當你想推新內容

顯示在通知中心:沒有

清醒的應用程序來執行的後臺任務:是

只需添加下面paylod從服務器端的推送通知 { 「內容可用」:1 }

{ 
"content-available" : 1 
}