2016-07-26 4 views
0

私は、サーバーに一連のデータを送信する必要のあるアプリケーションを持っています。私はNSURLSessionや他のAPIを使ってそれを行うことができます。問題は、ネットワークが利用可能になったときにデータを送信するためのコードをトリガーする必要があることです。このアクションの起動は、アプリがバックグラウンド/中断中であっても機能するはずです。私はperformFetchWithCompletionHandlerまたはhandleEventsForBackgroundURLSessionを使用して分割されます。現在私は前者を使用しています。 didFinishLaunchingWithOptionsネットワークが利用可能になるといつでもデータを送信する

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 

     //do some check for loggedInStatus here 

     if loggedInStatus { 

      let navigationController = self.window?.rootViewController as! UINavigationController 

      let myViewController = navigationController.viewControllers[0] as! MyViewController 

      //checking network connection 
      if NetworkReachability.connectedToNetwork() { 

       myViewController.syncStuff({ (result: UIBackgroundFetchResult) in 

        completionHandler(result) 
       }) 
      } 

     } 
    } 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

//if user is logged in set a minimum time interval at which the app should be woken up to sync stuff 
     if loggedInStatus { 

      application.setMinimumBackgroundFetchInterval(5) 
     } 
     else { 

      application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalNever) 
     } 
} 

このアプローチの問題は、アプリはいくつかの区間に、バックグラウンドで動作している場合にのみ、この方法は、トリガー取得することですが、アプリがある場合、私はものを送信することはできません。フォアグラウンドでこのアプローチを使用します。問題を解決する適切な方法は何ですか?

答えて

0

あなたの質問にお答えください:あなたのアプリがフォアグラウンドにあるときにトリガーをアップロードしてください。

私は、ネットワークが利用可能になったときにのみデータを送信するあなたの解決策は良いとは思っていません。あなたのアプリがフォアグラウンドになっているときにネットワークが常に利用可能な場合、データを送信する機会はありません。だから私はあなたのアプリがアクティブになったときにタイマーや火災の時間間隔を設定するなどのあなたのアップロード戦略を変更する必要があると思う、あなたのアプリがバックグラウンドに入るときにタイマーを無効にします。

あなたの質問を正しく理解していないのではないかと疑いがあります。ネットワークがWWANからWiFiに変更された場合にのみサーバーにデータを送信する場合は、AFNetworkingのAFNetworkReachabilityManagerを使用してください。 OK。

関連する問題