[解決済み】iOSは、ユーザーによって強制終了されたアプリをバックグラウンドで起動するのでしょうか?
質問
を使用してバックグラウンドフェッチをトリガーしています。
content-available
フラグをプッシュ通知で使用します。私は
fetch
と
remote-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の従業員によるものなので、この情報が正しいかどうかは信頼できると思います。
つまり、アプリスイッチャーから(上にスワイプして)アプリを終了させると、スケジュールされたバックグラウンド取得の場合でも、アプリは起動しなくなるようです。
関連
-
[解決済み】arm64アーキテクチャの未定義シンボルについて
-
[解決済み】"宣言はファイルスコープでのみ有効 "について
-
[解決済み】クラスは両方で実装されており、どちらかが使用されることになります。どちらが未定義か
-
[解決済み] Swiftエラー。変数がそれ自身の初期値内で使用されている
-
[解決済み] Cordova Camera iOSの問題。NOT_FOUND_ERR
-
[解決済み] UICollectionView: 非Nilのレイアウトパラメータで初期化する必要があります。
-
[解決済み] このアクションは完了できませんでした。再試行 (-22421)
-
[解決済み] iOS Swift 3 - UIDatePicker
-
[解決済み】iOSアプリの名前を変更する方法は?
-
[解決済み] iOSのプッシュ通知:アプリがバックグラウンドにあるときにユーザーが通知をタップしたかどうかを検出する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 'strcmp' はこのスコープで宣言されていません。
-
[解決済み] ウィンドウ階層にないビューを持つUIViewControllerでUIViewControllerを表示しようとする
-
[解決済み] エラーです。cocoapodsでRestKitをインストール後、「サンドボックスがPodfile.lockと同期していない...」と表示される
-
[解決済み] 「シミュレータで実行すると、「インストールされているプロビジョニングプロファイルが、インストールされているiOS署名アイデンティティと一致しません。
-
[解決済み] 指定されたホスト名を持つサーバーが見つからなかった
-
[解決済み] selector' の引数が '@objc' メソッド、プロパティ、またはイニシャライザを参照していない
-
[解決済み] dispatch_queue_create のキュー属性とは?
-
[解決済み] 脱獄したiphoneで`uicache`コマンドは何をするのですか?[クローズド]
-
[解決済み] CFBundleVersionとCFBundleShortVersionStringには、どのような値を使用すればよいですか?
-
[解決済み] Xcode 6: iOS 8.1 The Developer Disk Imageをマウントできませんでした。