2017-04-21 2 views
1

iOSのバックグランドに問題があります。まず、簡単な説明者にしてみましょう。iOSでXamarin.iOSでバックグランドする(C#):どの方法を使用しますか?

私は、ユーティリティを見つけるためのチケットを受け取り、配布できる仕事管理会社の仕事をしています。ユーザーはサーバーからチケットをダウンロードして作業し、返答をサーバーに送り返すことができます。ダウンロードしたチケットはローカルのSQLiteデータベースに入り、ユーザが作成した応答はローカルSQLiteデータベースに保存されます。私の同僚は、C#でXamarinでAndroidアプリを書いて、次のようにチケットをダウンロードして、レスポンスをアップロードするために彼の知的なプロセスは、次のとおりです。ローカルのSQLiteデータベースへの当社のサーバーから

  1. ダウンロード券、「チケット」
  2. をチェック応答があるかどうかを確認するにはローカルの「回答」SQLiteデータベースは
  3. を作っ作っ応答がある場合は、当社のサーバー
  4. に送って5分
  5. を待っ繰り返し

これにより、ユーザーは最初にバッチのバッチをダウンロードして作業することができます。ユーザーがインターネットを使用していないときにこのプロセスを実行すると、何も起こりません。タイマーがリセットされます。このプロセスにより、ユーザーはインターネットなしでチケットに応答することができ、インターネットに接続しているときは常に応答をアップロードしたり、新しいチケットをダウンロードしたりすることができます。

私の問題は、iOSではバックグランドがAndroidよりもはるかに制限されていることです。バックグラウンドフェッチがあり、プッシュ通知があります。バックグラウンドフェッチでは、システムはPerformFetchメソッドを実行するのに最適な機会を計算しますが、必要な厳格な5分タイマーは与えません。プッシュ通知では、ユーザーがインターネットを持たない場合、プッシュ通知を受け取ることはありません。

上記のように5分タイマーを設定してプロセスを実行し、新しいチケットがあるかどうかをチェックして、存在する場合は新しい応答を送信することができます。しかし、私はiOSのバックグラウンドの制限的性質のためにそれを行うことはできません。

提案がありますか?彼らは高く評価されるだろう。

ありがとうございました。

答えて

1

AndroidのようなiOSアプリケーションでバックグラウンドサービスを作成することはできません。しかし、あなたの要件を読んだ後は、本当にバックグラウンドが必要なように思えます。すべてのタスクにサービスが必要です。ユーザーがデータをオフラインで更新し、アプリケーションを閉じた場合にのみ必要です。しかし、これはiOSの制限ですが、iOSではこれを実現できません。

他のタスクでは、アプリケーションがアクティブなときにサーバーから非同期にデータを取得できます。

あなたは単にあなたのアプリがアクティブな場合にのみ実行される5分のタイマーを作成することができます。その時点で、コードを実行して新しいチケットを取得し、非同期モードでサーバーに応答を送信することができます。 Check here for more detail about how to do this in Xamarin

このプロセスは非同期で、通常のUIアクティビティを妨げません。ユーザーは、データベースに新しいチケットがあるかどうかをチェックし、インターネット接続が可能なときはいつでもタイマーのデータベースなどの応答を更新できます。

関連する問題