コンテンツにスキップ

バックグラウンドタスク

本 SDK は下記の目的のために、エンドユーザーが App を起動していないときもバックグラウンドタスクを実行させる必要があります。

  • ユーザーが App を起動していないときもGPS配信またはBluetooth配信を実施する
  • ユーザーの App 利用状況を集計し、FANSHIP 管理画面から確認できるようにする

バックグラウンドタスクを実行するための方法として、下記の2つの方法があります

  1. Background Tasks API の Background App Refresh Tasks (以下 BGAppRefresh) を利用する
  2. Background Tasks API の Background Processing Tasks (以下 BGProcessing) を利用する

BGAppRefresh と BGProcessing について

BGAppRefresh と BGProcessing はどちらも iOS 13 から追加された Background Tasks API に属する機能ですが、発動タイミングやタスクを実行可能な制限時間等が両者間で異なります。

Appleのドキュメント Choosing Background Strategies for Your App をご覧の上、ご利用のプロジェクトにおいて適切なものをお選びください。

なお、Background Tasks API の仕様に関するお問い合わせは、お手数ですが Apple Developer サポート にて行っていただきますようお願い致します。

旧バックグラウンドフェッチは廃止予定です。

以下、各方法の実装手順をご説明します。

[共通設定] plist の設定

BGAppRefresh または BGProcessing を使用する場合は Permitted background task scheduler identifiers を登録する必要があります。

plist-bgtask.png

  1. TARGETS > Info > Custom iOS Target Properties 内に、キー Permitted background task scheduler identifiers を追加します。
  2. キーに対する値の Type が Array になっていることを確認します。
  3. Array の中に Item を1行追加します。
  4. 追加した Item の Type が String になっていることを確認します。
  5. Item の値に識別子を設定します。
    • 識別子は他と重複しないような文字列を設定してください。
      • BGAppRefreshBGProcessing を同時に利用する場合は、それぞれ異なる値を設定する必要があります。
  6. SdkSettings.plist 内のキー FanshipBGTaskSchedulerPermittedIdentifiers の値に、同じ識別子を設定する。

[BGAppRefresh] を利用する

  1. TARGETS > Capabilities > Background Modes にて、下記のチェックボックスをオンにします。
    • Background fetch
  2. -[AppDelegate applicationDidEnterBackground:] 内部にて、-[PopinfoReceiver scheduleAppRefreshTask] をコールします。

    - (void)applicationDidEnterBackground:(UIApplication *)application {
        [popinfoReceiver enterBackgroundTask];
    }
    
    func applicationDidEnterBackground(_ application: UIApplication) {
        popinfoReceiver.enterBackgroundTask()
    }
    

[BGProcessing] を利用する

  1. TARGETS > Capabilities > Background Modes にて、下記のチェックボックスをオンにします。
    • Background fetch
    • Background processing
  2. フラグ FANSHIP_BG_PROCESSING_TASK_USE を有効にします。以下のいずれかを実施してください。
    • Build Settings > Apple Clang - Processing > Preprocessor MacrosFANSHIP_BG_PROCESSING_TASK_USE=1 をセットする。
    • ビルド時の引数に OTHER_CFLAGS="-DFANSHIP_BG_PROCESSING_TASK_USE=1" をセットする
  3. -[AppDelegate applicationDidEnterBackground:] 内部にて、-[PopinfoReceiver enterBackgroundTask] をコールします。

    - (void)applicationDidEnterBackground:(UIApplication *)application {
        [popinfoReceiver enterBackgroundTask];
    }
    
    func applicationDidEnterBackground(_ application: UIApplication) {
        popinfoReceiver.enterBackgroundTask()
    }
    

Background Tasks API 間の同時利用

一つの App 内で BGAppRefresh と BGProcessing は同時に利用できますが、本SDKのバックグラウンドタスクは動作を安定させるために BGAppRefresh または BGProcessing のいずれか一方を利用して実装する形式となっています。