2

私は2つの異なるアプリケーションを開発しました

  1. App1 - Healthkit が有効になっています。
  2. App2 - イオンアプリケーション

App1 タスク : サーバーに保存されている healthkit からデータを読み取ります。

App2 タスク : サーバーから保存されたデータを取得して表示します。

openURLScheme を使用して、App1 から App2 を開始しました。したがって、App1 はバックグラウンド モードで実行され、さらに 3 分から 1 時間以上継続する必要があります。

次のシナリオを試しました:

bgTask = self.applicationUI!.beginBackgroundTaskWithName("MyTask", expirationHandler: { () -> Void in

        self.applicationUI!.endBackgroundTask(self.bgTask!)

        self.bgTask = UIBackgroundTaskInvalid;
    })

    self.bgTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({ () -> Void in
        self.monitorInBackground()
    })

エラーが発生します: allowedBackgroundDuration: 180.000000 reason: finishTask

次の 3 分間の範囲のバックグラウンド プロセス (IOS 7 の導入後。IOS 7 の前では、プロセスの実行時間は 10 分でした)。

ノート :

APNSサイレント通知を使用して実現できることを願っています. しかし、私は APNS 以外のより良い解決策を期待していました。

4

1 に答える 1

2

Appleのドキュメントには、バックグラウンド実行に関する優れたセクションがあります。

これを行う 2 つの方法は、サイレント通知 (ご提案どおり) とバックグラウンド フェッチです。

サイレント通知を使用する「長所」は、ユーザーがオンラインである限り、いつ発生するかをかなり正確に制御できることです。(いずれにせよ、サーバーにアクセスするためには、おそらくこれが必要です。) しかし、そうです、それは多くの複雑さを追加します。

バックグラウンド フェッチはうまく機能しますがそれが発生するタイミングをあまり制御できません。アプリの機能によっては、これが問題になる場合とそうでない場合があります。

機能する可能性のあるその他のオプションには、バックグラウンド オーディオ、位置情報の更新、VoIP などがありますが、拒否される可能性があります。

バックグラウンド タスクを実行するだけでは機能しません。これは、タスクを長時間実行し続けるのではなく、タスクを完了するように設計されています。

于 2015-12-11T14:25:44.667 に答える