アプリが実行されていないときに発生するローカル通知に関して、非常に奇妙な問題が発生しました。実行されていないということは、完全に終了していることを意味します (ホームボタンをダブルタブしてもタスクリストに表示されません)。
通常の実行状況では、アプリがバックグラウンドで実行されているときに、デバイスが X 秒以上静止している場合、アプリは警告音とともにローカル通知を生成します。その 15 秒後にアクションが実行されない場合、別のローカル通知が緊急メッセージとともに生成されます。
アプリが終了してから数時間後または数日後にランダムに、デバイスは突然警告通知を報告し、その後約 15 秒後に緊急通知を報告します。これは、アプリがバックグラウンドで正常に実行されている場合と同じです。前述のとおり、アプリが実行中のタスク リストに表示されておらず、完全に終了しているように見えることを確認しました。
アプリは、場所、音声、VOIP の長期バックグラウンド処理モードに登録されています。
アプリが終了すると (applicationWillTerminate で)、クリーンアップを実行します。これには、タイマーのシャットダウンと無効化、ローカル通知のキャンセルなどが含まれます。
私には2つの理論があります:
- これらの「ゴースト」通知は、アプリの実行中にキューに入れられたが、今まで実行されなかった古い通知にすぎないのでしょうか (私の質問は、警告と緊急通知の時間差がまだ尊重されているのはなぜですか)。
- アプリが深いバックグラウンドのどこかで「密かに」実行されている可能性はありますか? その場合、デバイスが定期的にアプリを「起動」しているように見えます。この場合、この「モーニング コール」の基準として使用しているデバイスは何ですか。
誰かがこの奇妙な問題に遭遇したのではないかと思います。もしそうなら、どうすれば問題を解決できますか?
追伸 - 私たちは iOS 開発にまったく慣れていないため、完全に明らかな見落としがある場合は事前に謝罪
更新 #1 xCode のログ メッセージを使用して、アプリケーションがタスク バーの閉鎖によってシャットダウンされたときに、applicationWillTerminate が一貫して呼び出されることを確認しました。ただし、この動作が信頼できるかどうかについては多くの議論があるように思われるため、私の観察が一貫していると信じているかどうかを最終的には言いませんが、私はその方向に傾いています. ただし、これに関するさらなる洞察をいただければ幸いです。
更新 #2
昨夜、新しいアプローチを試しました。これまでは、メソッドを使用して「今すぐ」通知を送信するようにスケジュールし[application scheduleLocalNotifications]
、日付を現在の時刻に設定していました。代わりに、[application presentLocalNotificationNow]
メソッドを使用し、日付/時刻を指定しませんでした。アプリは引き続き正常に機能しますが、アプリが実行されていない昨夜、「ゴースト」通知がランダムにトリガーされたため、問題は解決しませんでした。問題が「古い通知」関連の問題ではなく、長期的なバックグラウンド実行登録の結果としての何らかのトリガーによりアプリケーションが「起動」することに関係しているのかどうか疑問に思っています.