

iBeaconを複数個設置し、それぞれのBeaconのエリア内に入った際に別の動作(バックグラウンド)をさせるようにしたいと考えています。

同一UUIDでMajorを変えることでできるかと思いましたが、didEnterRegion内ではどのMajorのBeaconを掴んでエリア内に入ったかを認識することは可能でしょうか？

もしくは複数個のUUIDのビーコンをモニタリングし、それぞれのUUID毎のエリアに入った際の動作を決めることになるのでしょうか？


CC BY-SA 3.0
2014-12-18T14:48:10.223
2051
2015-08-25T06:20:28.910
2014-12-18T15:05:35.597
33
5032
question
ios objective-c ibeacon
iBeaconでエリア毎に動作を分ける方法


直接iBeaconのコードを組んだことはないので申し訳ないですが、GeoFencingで同じようなことをしていました。以下のような感じでmajorが参照できるのではないでしょうか？

[code]

    - (void)locationManager:(CLLocationManager *)manager
             didEnterRegion:(CLRegion *)region
    {
        if ([region isKindOfClass:[CLBeaconRegion class]]) {
            CLBeaconRegion *bregion = (CLBeaconRegion *)region;
            if ([bregion.major intValue] == 1) {
                ...
            }
    
[/code]


CC BY-SA 3.0
2014-12-18T18:00:41.540
2061
2014-12-18T18:00:41.540
5043
2051
answer


didEnterRegionではMajor,Minorは取得出来なかったと思います。

[code]

    - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{
        if ([region isMemberOfClass:[CLBeaconRegion class]]){
            [manager startRangingBeaconsInRegion:(CLBeaconRegion *)region];
        }
    }
    
[/code]

上記の様にdidEnterRegion内でstartRangingBeaconsInRegionを呼び出し、

[code]

    - (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region{
        for(CLBeacon *beacon in beacons){
            if([beacon.major intValue] == 1){
                //処理
            }
        }
    }
    
[/code]

didRangeBeacons内で判別が出来るはずです。


CC BY-SA 3.0
2014-12-19T03:19:48.597
2087
2014-12-19T03:25:22.353
2014-12-19T03:25:22.353
5137
5137
2051
answer


didEnterRegion内では、major, minorなどのBeaconの詳細情報を取得することはできません。  
major, minor情報はdidRangeBeacons内でのみ取得が可能です。

しかし、didRangeBeaconsはバックグラウンドで実行し続けることができません。  
バックグランドで利用するのであれば、  
didEnterRegionをトリガーにstartRangingBeaconsInRegionを実行して、  
約10秒程度の間だけ取得可能なmajor, minorの値で処理をすれば良いのではないでしょうか？

ただし、Beaconの機器が近かったり、電波出力が大きかったりする場合は、  
同じUUIDだと領域が重複するため、注意が必要です。  
その場合はUUIDを別にした方が良いかもしれません。


CC BY-SA 3.0
2015-08-25T06:20:28.910
14820
2015-08-25T06:20:28.910
8968
2051
answer