毎時電話に接続してデータを渡すBLE周辺機器があります。ここでは、プロセスがどのように働くかある:iOSは着信BLE接続時に周辺機器からアプリケーションを起動させないようにします。
起動時に持つキーUIApplicationLaunchOptionsBluetoothCentralsKey
application(didFinishLaunchingWithOptions launchOptions)
-
中のアプリに渡されたIDを持つCBCentralManagerは再初期化します。
- その後、通常の復元サイクルを経て、BLEペリフェラルからデータを読み取ります。
- クラウド内のサービスに対してREST要求を実行します。
携帯電話の再起動後にアプリが少なくとも1回起動されたとすると、アプリが実行されていないか、メモリが不足していると、iOSはユーザーが強制終了したと仮定して手動で)。
しかし、数日おきに、iOSはBLEデバイスからの着信要求があったときにアプリの起動を停止します。ユーザーがアプリを再起動すると、数日間すべて正常に動作し、その後再び停止します。私たちの製品の性質上、アプリ/周辺機器を最も信頼性の高い方法で連携させることが不可欠です。それが起きている可能性がある理由として
理論:
(綿密に検討すると、それらのすべてを解雇されたが)
ユーザーが携帯電話を再起動して、アプリを再起動するのを忘れ。
アップタイムのログが追加され、アプリの起動の間に電話機が再起動しなかったことが示されました。メモリの警告により、アプリケーションが起動されます。
はもう一度、ログを追加し、彼らはapplicationDidReceiveMemoryWarning
接続不良がアップロードした結果とiOSはそれを終了したときに10秒より長い期間のために実行されているアプリにつながりませんがあったことを示したと私たちは、人為的に遅れ
サーバーを怒りますこれをテストするための15秒単位の応答。テスト中はすべてが適切に機能し続けます。
何が起こっているのか、またiOSが着信BLE接続についてアプリに通知しない理由については、何か考えてください。
問題の1つは、問題を確実に再現する方法を見つけることができないということです。提案があればそれも大いに評価されます。
ありがとうございました!
UPDATE 1:ここでは たちはCBCentralManager
を初期化する方法である:
self.centralManager = CBCentralManager(delegate: self, queue: nil, options: [
CBCentralManagerOptionRestoreIdentifierKey : MyCentralManagerID,
CBCentralManagerOptionShowPowerAlertKey : 0])
私はパラメータをキューにいくつかの提案がnilであってはならないました。私が問題を確実に再現することができないとすれば、その影響を自信を持って観察することができるまで、私はその変更を行うことをためらっています。
Antonこの問題に関するこのような徹底した思慮深いポストに感謝します。それを理解しようとするのは非常にイライラしています。あなたの答えは私たちが恐れていたことを確認します。その問題はiOS自体であり、アプリが何をしているのではなく、 – Maxim
私はこれらの問題で「いくらかの」信頼性を得ることができました。私の投稿をここでチェックしてください。https://stackoverflow.com/questions/45738824/in-ios-10-is-there-any-way-to-reliably-wake -up-an-app/45799341#45799341 – GoreDefex