2016-12-06 16 views
-1

私のアプリケーションは、私が制御しないサーバーからJSONを抽出し、そのJSONを解析してUITableViewを設定します。自動更新JSON

UITableViewをリアルタイムでサーバー上の最新情報を反映するように更新したいと考えています。したがって、サーバ上で何か変わると、私のUITableViewも更新されます。

ここで思いつく1つの解決策は、継続的にGETを送信することです。リクエスト1分後にJSONを解析し、テーブルのデータをリロードします。

ただし、この問題の解決策がいくつかあります。私は検索しようとしましたが、これまでのところ成功しませんでした。

私はこの質問がstackoverflowの標準によって多少主観的だと理解していますが、実際には私はこの問題に関して助けが必要で、どこから始めればいいのか分かりません。だから、どんな助けでも大歓迎です。

+2

最も簡単な方法は、タイマーを使用することです。リアルタイムが必須の場合は、http接続の代わりに[socket](https://github.com/socketio/socket.io-client-swift)を使用してください。 – Ryan

+0

解答を参照することができます:http://stackoverflow.com/a/41002245/3077339 –

+0

しかし私はタイマーを使いたくないので、サーバーは自分のコントロールにないので、プッシュ通知を送ることはできません –

答えて

3

繰り返しGETは何も起きていないときにクライアントとサーバーのリソースを要求するため、一般的に悩まされています。

サーバーを管理していないので、私はあなたがポーリングを行うことができ制御を行い、その後の変化を検出したときにプッシュを送信サーバーを構築するお勧めします。これには、クライアントからのポーリングに比べていくつかの利点があります。ポーリングのソースが1つしかないため、クライアントのエネルギーを節約するだけでなく、純粋なプッシュアプ​​ローチが節約できます。

Apple provides a push system (APNS)あなたのサーバーは(Apple経由で)あなたのiOSデバイスにメッセージを送信します。デバイスはバックグラウンドでアプリを起動し、アプリデリゲートの

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

を呼び出します。

+0

まさに私はGETを繰り返すことを望まないし、問題は私がサーバーを所有していないので、実際にサーバーからメッセージを送ることができないということです。 –

+0

それを逃しました。編集を参照してください。 – danh

+0

これはおそらく最適な解決策になります。あなたのアプリでフェールオーバーオプションを作るよう気をつけてください。ユーザーがプッシュ通知を承認しなかった場合は、各アプリでサーバーをプルしたいと思うかもしれません(それをどうにかしたいかもしれません)。人々があなたのアプリをどのように使っているかにかかっている:彼らはそれを始めてから2時間それを目で見ているのだろうか?ほとんどの場合、それぞれの 'applicationDidBecomeActive:'とオプションの "refresh down to pull"(これはUITableViewを使用しているので、これは10ライナーになるでしょう...)でリフレッシュされます。 –

0

上記の回答のように、APNSを使用する方が優れています。しかし、あなたが本当にサーバーを制御していない場合、あなたが説明するように、投票以外は何もできません。

  • Wifiの制約:あなたはiOSのために書いているので、あなたもいくつかのことを考えるようにアドバイスしているあなたはあなたが無線LAN上にあるかどうかは関係ないような小さなペイロードを取得していますか?それ以外の場合は、ユーザのセルラーサービスへの抵抗ではないようにリーチャビリティを設定する必要があります。
  • バックグラウンドセッション&バックグラウンド実行:NSBackgroundUrlSessionを使用してこのデータを要求することを検討してください。バックグラウンドセッションは、OSが機敏に要求を実行できるようにする点で、OSの方が少し効率的です。バックグラウンドセッションのNSURLSessionTasksをカスタマイズする必要がある場合は、バックグラウンド実行権を考慮してください。
  • スケーラビリティ:あなたのバックエンドは、あなたのボリュームからの連続リクエストを処理できますか?
  • より良いソリューションが
0

通常サイレント通知は、サーバー上の任意の新しい項目を追加するこの

ための最適なソリューションですAPNS、またはソケット/ WebSocketを/ Socket.io/firebase /などを利用かもしれませんサーバー側で何かを追加したことを通知するためにデバイスにプッシュ通知(サイレントプッシュ通知)を送信することができます。

デバイスがこのようなプッシュ通知を受信すると、APIを呼び出してテーブルビューをリロードする必要があります。したがって、10秒ごとにテーブルビューをリロードする必要はありません。

それは「通知バーに通知アラートが表示されませんが、あなたが新しいコンテンツをプッシュするときにのみ、利用可能いくつかの新しいデータがあることを、あなたのアプリに通知する通知センターに表示さ

:なし

アウェイクアプリは、バックグラウンドタスクを実行する:はい

ちょうど{「 - 利用可能なコンテンツ」 :1 }プッシュ通知にサーバ側からpaylodの下 を追加

{ 
"content-available" : 1 
}