1. ホーム
  2. アイオス

[解決済み】iOSは、ユーザーによって強制終了されたアプリをバックグラウンドで起動するのでしょうか?

2022-04-08 02:32:23

質問

を使用してバックグラウンドフェッチをトリガーしています。 content-available フラグをプッシュ通知で使用します。私は fetchremote-notification UIBackgroundModes を有効にした。

以下は、私がAppDelegate.mで使用している実装である。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Remote Notification Recieved");
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody =  @"Looks like i got a notification - fetch thingy";
    [application presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}

アプリがバックグラウンドで動作している場合は、問題なく動作します。 (通知を受信し、アプリは上記のコードが行うべきものとして、"looks like i got a notification" ローカル通知をトリガーしました)。

しかし アプリが起動していないとき でプッシュ通知を受信し content-available のフラグを立てます。 アプリが起動しない didRecieveRemoteNotification デリゲートメソッドが呼ばれることはありません。

WWDCの動画 マルチタスクの新機能 (WWDC 2013の#204)に掲載されています。

でプッシュ通知を受信すると、アプリケーションが "バックグラウンドに起動されると書かれています。 content-available フラグを使用します。

私のアプリがバックグラウンドで起動しないのはなぜですか?

そこで、本当の疑問は

ユーザーがアプリを強制終了した後、iOSはバックグラウンドタスクを実行するのでしょうか?

解決方法を教えてください。

UPDATE2です。

あなた できる iOS 8で導入された新しいフレームワーク「PushKit」を使って実現します。ただし、PushKitはVoIPに使用されます。そのため、VoIPに関連した使い方でなければ、アプリが拒否される危険性があります。(参照 この回答 ).


UDPDATE1です。

のドキュメントが明確化されました。 iOS8 . ドキュメントはこちらからご覧いただけます。 こちら . 以下、関連する部分を抜粋してご紹介します。

このメソッドを使用して、アプリのリモート通知の着信を処理します。 とは異なり application:didReceiveRemoteNotification: メソッドは アプリがフォアグラウンドで動作しているときのみ呼び出されるのに対し、システム側では このメソッドは、アプリがフォアグラウンドあるいは バックグラウンド また、リモート通知機能 バックグラウンドモードでは、システムはアプリを起動します(または、アプリを起動した後 プッシュ通知されると、サスペンド状態からバックグランド状態に移行します。 の通知が届きます。 ただし、システムが自動的に ユーザーがアプリを強制終了した場合、アプリが起動します。そのような場合、ユーザーは を起動するか、デバイスを再起動する必要があります。 は、再びアプリを自動起動しようとします。


WWDCのビデオでは明らかにされませんでしたが、開発者フォーラムで検索したところ、このようなことが判明しました。

https://devforums.apple.com/message/873265#873265 (ログインが必要です)

<ブロッククオート

また、アプリスイッチャーからアプリを終了させる場合、以下の点に注意してください。 (例: 上にスワイプしてアプリを終了させる) その場合、OSは決してそのアプリを再立ち上げません。 プッシュ通知やバックグラウンドフェッチに関係なく、アプリを使用することができます。 この場合 一旦、手動でアプリを起動させなければなりません。 が起動されます。- pmarcos

この投稿はAppleの従業員によるものなので、この情報が正しいかどうかは信頼できると思います。

つまり、アプリスイッチャーから(上にスワイプして)アプリを終了させると、スケジュールされたバックグラウンド取得の場合でも、アプリは起動しなくなるようです。