2016-09-27 10 views
0

ビーコン(私はUIIDを知っている)をスキャンして表示するアプリケーションがあります。最初の数回は私はそれを実行した私はほとんどすぐにビーコンを見つけた。しかし、今は私がそれを実行するたびに、それを検出するためにはもっと長くかかりそうです。私はビーコンが装置のすぐ隣にある机の上に座っています。iOS:ビーコンの検出に長時間を要する

バッテリーを交換したり、iPhoneからiPadに変更したり、Macのビーコンスキャンアプリをチェックしたり、アプリを再構築したりなど、さまざまなメーカーからのさまざまなビーコンがあります同じ問題がある。これを修正するものはありません。

let locationManager = CLLocationManager() 
locationManager.delegate = self 
let region = CLBeaconRegion(proximityUUID: UUID(uuidString:"61687109-905F-4436-91F8-E602F514C96D")!, identifier: "BlueCat beacon") 
locationManager.startMonitoring(for: region) 

をそして私は、コールを取得するデリゲートメソッドのいずれかの前に、5分以上まで何のために待つことができます。

私のコードは、基本的には、このようになります。

私がビーコンを使用しようとしたのはこれが初めてです。これは正常ですか?ビーコンがデバイスに見られるまでに長い時間がかかりますか?

答えて

1

理想的な条件下では、iOSのコールバックは、ビーコンが範囲内に入ってから数秒以内に来ます。あまり理想的でない条件下では、これらのコールバックには15分以上かかります。

モニタリング時にビーコンを検出する際に遅延を招くことがあり、テストの方法を正確に把握していないと言うことは大変です。二つのヒント:iOSデバイス上の

  1. ハードウェアフィルタスロットはを制限して、先着順にされています。これらのスロットを占有しているビーコンアプリが多数インストールされている場合(またはアプリが多数の地域を登録している場合)、これらのスロットはすべて取り込まれている可能性があります。ハードウェアフィルタスロットがなくなると、検出は15分ごとに発生するソフトウェアスキャンに戻ります。これらのスロットに固定されている可能性のあるすべてのアプリ(自分自身を含む)をアンインストールしてから、アプリだけを再インストールします。

  2. アプリをバックグラウンドに置いたときに「領域内」でないことを確認してください。 iOSが地域内にいると考えている場合は、地域を離れることを認識してから再入力するまで、新しいdidEnterRegionコールバックを取得することはありません。 iOSがそれを実現するための時間は、それが実現するのにかかる時間よりもはるかに長いです。地域を出るのを確実にするためには、アプリがフォアグラウンドにあるときに常にビーコンの範囲を設定し、iOSがそれがもはや地域にないことを確認するためにフォアグラウンドでフォアグラウンドに置くようにしておく必要があります(通常30秒の範囲内で終了するようにしてください)。それだけをバックグラウンドに置き、検出時間を測定するビーコンをオンにする必要があります。

関連する問題