iOSで検知可能なCLBeaconRegionの数について
さて、今日は久しぶりにiBeaconについて書きます。
以前、複数のiBeaconを検知しよう!(別UUIDの場合)で別UUIDの複数のiBeaconを検知する方法について書きました。
今回は、その限界数について見ていきたいと思います。
位置情報とマッププログラミングガイドを読むと、地理的領域の観測は最大20個まで可能とされています。
しかし、iBeacon領域の観測について最大数が書かれていませんでした。
Googleで調べてもなかなか出てこなかったので、自分で調べることにしました。
結果から言うと、iBeacon領域の観測は 最大20個 まで可能でした。
(地理的領域の観測と同じでした。)
因みに、下記ソースで確認しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| import UIKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate {
var lm:CLLocationManager?
var uuids:[String]?
override func viewDidLoad() {
super.viewDidLoad()
self.lm = CLLocationManager()
self.lm?.delegate = self
self.uuids = [ ここにUUIDの文字列を20個以上用意 ]
self.lm?.requestAlwaysAuthorization()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
// 位置情報サービスの許可状態が変更した場合に呼び出される処理
if(status == .AuthorizedAlways) {
for(var i=0; i < self.uuids.count; i++) {
let uuidString = self.uuids[i]
let uuid = NSUUID.init(UUIDString: uuidString)
let beaconRegion = CLBeaconRegion.init(proximityUUID: uuid!, identifier: ("beaconRegion"+String(i)))
self.lm?.startMonitoringForRegion(beaconRegion)
}
}
}
func locationManager(manager: CLLocationManager, didStartMonitoringForRegion region: CLRegion) {
// Regionのモニタリングが開始したときに呼び出される処理
print("\(region)")
}
func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
// Regionに対する状態が変化したときに呼び出される処理
switch(state) {
case .Inside:
print("Inside: \(region)")
break
case .Outside:
print("Outside: \(region)")
break
case .Unknown:
print("Unknown: \(region)")
break
}
}
}
|
viewDidLoad
内でuuidsの初期化を行っていますが、ここで20個UUIDを設定すると、didDetermineState
内でログが20回出力されました。
しかし、21個以上UUIDを設定した場合は、先ほどと同じく20回のログ出力となり、21個目以降に設定したUUIDに関してはログ出力されませんでした。
つまり、先に設定したUUIDが有効で、21個目以降のUUIDは無効ということになります。
複数のUUIDを大量に使う際には気をつけましょう。
と言ったところで本日はここまで。