周辺機器として機能し、iBeacons の範囲として機能するデバイスを使用して、coreBluetooth を介してサービスをアドバタイズできるかどうかを知りたいのですが、バックグラウンドで両方を達成できますか? 基本的には、ビーコンの範囲を設定し、ビーコンが近距離または近距離の範囲内にある場合、デバイスによってアドバタイズされたサービスの特性を更新することを目的としています。測距タスクを喜んで達成できます。スリムな周辺機器として機能するデバイスに関する情報を見つけましたが、それを管理できると思いますが、バックグラウンド機能の制限によって何度も停止されたため、このタイプのシナリオが可能かどうかを知りたいと思っていました私は、誰もが不可能だとわかっている何かを達成しようと多くの時間を費やしています。私は一般的にSwiftとiOSに慣れていないので、多くのことを成し遂げるのに時間がかかります. アドバイスをいただければ幸いです。ありがとう
1 に答える
背景には制限がありますが、これは可能です。
前景:
- まさにあなたが説明したことが可能です。
CoreBluetooth
iOS では、 を使用して iBeacons の範囲を設定しながら、 を使用して Bluetooth LE サービスを同時にアドバタイズできますCoreLocation
。
バックグラウンド:
iOS は
CoreLocation
、のビーコン範囲 API を使用したバックグラウンド ビーコン スキャンを、ビーコン領域が最初に検出されてからわずか5 秒に制限しています。私がここに書いたブログ投稿の手法を使用して、この 5 秒のスキャンを最大 3 分に延長することができます。より長く延長するには、Info.plist にロケーション バックグラウンド モードを追加する必要があります。これにより、アプリが AppStore で承認されるのが難しくなる可能性があります。iOSのバックグラウンドでの Bluetooth LE サービスの広告は、フォアグラウンドでの広告のようには機能しません。これは、Apple 独自の技術を使用して、サービス識別子を小さなアドバタイジング パケットにまとめ、Bluetooth LE サービスをアドバタイズするすべてのアプリで共有されます。これらは、iOS 以外の Bluetooth LE デバイスでは簡単に検出できない場合があります。
CBAdvertisementDataLocalNameKey アドバタイズ キーは無視され、周辺機器のローカル名はアドバタイズされません。CBAdvertisementDataServiceUUIDsKey アドバタイズ キーの値に含まれるすべてのサービス UUID は、特別な「オーバーフロー」領域に配置されます。これらは、明示的にスキャンしている iOS デバイスによってのみ検出されます。アドバタイズしているすべてのアプリがバックグラウンドにある場合、周辺機器がアドバタイジング パケットを送信する頻度が低下する可能性があります。
詳細については、こちらのbluetooth-peripheral バックグラウンド実行モードセクションを参照してください。