web-dev-qa-db-ja.com

Bluetooth信号(BLE)でiOSアプリを起動する方法

CoreBluetooth(iBeaconなし)でBLEを使用する場合、デバイスがBluetooth信号を受信したときに実行されていないアプリをウェイクする方法はありますか?

RedBearlabのBLEシールド( http://redbearlab.com/bleshield/ )でビーコンをシミュレートしています。

ありがとう、DAN

* UPDATE 03/05/14 *

AppleがiOS 7.1でメジャーアップデートを導入しました:アプリが一致するUUIDを検出すると、iOSがアプリを開きます。アプリをインストールするだけで、実行している必要はありません(ウェイクアップコールに応答するためにAppDelegateのロジックが必要です)。

16
DAN

他のアプリからのメモリ不足により、アプリがバックグラウンドで実行されていて閉じられた場合(つまり、ここで終了し、ホームボタンをダブルクリックしたときにバックグラウンドアプリのリストに表示されなくなった場合)、iOSはデリゲートが呼び出されたときに再び起動することに注意してください(.plistにバックグラウンドモードがリストされていると仮定します)。

アプリがバックグラウンドで実行されていて、ユーザーによって閉じられた場合(ここでも終了しました。したがって、ユーザーはダブルクリックしてバックグラウンドで実行中のアプリのリストを取得し、バックグラウンドリストでアプリが揺れ動くまでクリックしました。次に、アプリの横にある「x」を押してアプリを強制終了します)。これは、ユーザーがアプリをバックグラウンドで実行したくないため、アプリが再起動されないことを示しています。ユーザーは、代理人がバックグラウンドで機能を再開するためにアプリを再起動する必要があります(iOS7の新機能)。

更新:これがドキュメントにあるかどうかはわかりませんが、CoreBluetooth WWDC 2013ビデオにあります。ご覧になることをお勧めします。 CoreBluetoothがバックグラウンドでどのように動作するかについて、ビデオのかなりの部分を費やしました。

10
Khaled Barazi

私が理解しているところによると、アプリが以前にBLEペリフェラルに接続したことがない場合は、違います。

アプリが以前にBLEペリフェラルに接続したことがある場合は、以下を使用します。

-connectPeripheral:options

接続要求はタイムアウトしません。このメソッドを呼び出すのに最適な場所は、アプリがBLEペリフェラルとの接続を失ったときです。 CBCentralManagerDelegateプロトコルでペリフェラルへの接続が失われると、通知が届きます。

-centralManager:didDisconnectPeripheral:エラー

したがって、次にアプリがBLEペリフェラルの範囲内に入ると、このメソッドがトリガーされます。また、CBCentralManagerを初期化するときに、状態の保存と復元を設定する必要があることに注意してください。

3
David Chu

https://developer.Apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

cBCentralManagerDelegateまたはCBPeripheralDelegateデリゲートメソッドのいずれかが呼び出されたときにシステムがアプリをウェイクアップし、接続が確立または切断されたとき、周辺機器が更新された特性値を送信したとき、および中央マネージャーの状態変化。

バックグラウンドで特定のペリフェラルロールタスクを実行するには、bluetooth-peripheral値を含むUIBackgroundModesキーをアプリのInfo.plistファイルに含める必要があります。このキーと値のペアがアプリのInfo.plistファイルに含まれている場合、システムはアプリを起動して、読み取り、書き込み、サブスクリプションイベントを処理します。

1
Andrew