Radius Network [1] のテストによると、iOS デバイスは監視モードで最大 30 のビーコン領域しか検出できません。しかし、Android で (ほぼ) 無限の数のビーコン領域を定義できるのはなぜですか?
明確にしていただきありがとうございます。
[1] http://developer.radiusnetworks.com/2015/04/21/max-beacon-regions-ios.html
Radius Network [1] のテストによると、iOS デバイスは監視モードで最大 30 のビーコン領域しか検出できません。しかし、Android で (ほぼ) 無限の数のビーコン領域を定義できるのはなぜですか?
明確にしていただきありがとうございます。
[1] http://developer.radiusnetworks.com/2015/04/21/max-beacon-regions-ios.html
明確にするために、iOS には実際には 2 つの制限があります。
各 iOS アプリは、最大 20 個の定義済み を監視できCLBeaconRegion
ます。この制限は、アプリあたり最大 20 個のジオフェンスからのホールドオーバーです。 Apple が同じ API を拡張したため、アプリごとに 20 秒という制限がCLRegion
ビーコンによって継承されましCLBeaconRegion
たCLRegion
。Apple がビーコンに関してこれと同じ制限を維持することを決定した理由は他にもあると思われますが、これが最初の理由です。
デバイスに (すべてのアプリにわたって) 登録された最初の 30 個の CLBeaconRegions は、検出が高速化されます。 これは、Bluetooth チップのハードウェア スロットが、BLE パケットのハードウェア マッチング用に制限されているためです。これらのスロットがすべて使用されると、検出は低速の定期的なソフトウェア スキャンに戻ります。
Android では、これらの正確な制限は適用されませんが、他の制限が存在します。Android ビーコン ライブラリには、次の制限が適用されます。
監視できるリージョンの数に制限はありません。 ただし、マッチングは最終的にソフトウェアで行われるため、極端に多くの領域 (数百または数千) を監視すると、アプリの速度が低下し、パフォーマンスの問題が発生する可能性があります。
ハードウェア アクセラレーション フィルタは、Android 5.0 以降でのみ機能します (スマートフォンのハードウェアで利用可能な場合)。これらは、特定のビーコン リージョンではなく、ビーコン タイプに対して適用されます。そのため、高速ハードウェア検出に地域制限はありませんが、複数のビーコンが同時に表示される場合、アプリは最初に表示されるビーコンの高速検出のみを取得します。その後の検出は、すべてのビーコンが消えるまで、iOS のように低速の定期的なソフトウェア スキャンにフォールバックします。
iOS が監視できるのは実際には 20 のビーコン領域であり、Apple によって CoreLocation フレームワークに導入された制限にすぎません。
理由の公式な説明はありませんが、私の推測では、Apple は、その機能を悪用してデバイスのバッテリー寿命に悪影響を与えることを避けるために、開発者が大量/無限の領域を監視することを望んでいないと思われます.