2014-01-20 18 views
6

私はRoximityからいくつかのビーコンを得て、私が集めたものから、すべてのRoximityビーコンは同じUUIDを持っています。 [locationManager: didRangeBeacons: inRegion:]を使用してメジャーとマイナー値を取得できることがわかりますが、プッシュ通知を送信するように[locationManager didEnterRegion]を設定し、ユーザーが別のRoximityビーコンで歩いている場合、どうすれば[locationManager didEnterRegion]でこれを判断できますか?Can [LocationManager didEnterRegion]ビーコンのメジャーとマイナーを取得できますか?

答えて

12

基本的に2つの選択肢があります。

  1. 監視対象の領域を定義して、特定のメジャー番号とマイナー番号が含まれるようにします。主な制限は、iOSだけで、あなたが唯一の20種類iBeaconsのためにこれを行うことができることを意味し、同時に20件の地域を監視できることです:

    CLBeaconRegion *region1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"8deefbb9-f738-4297-8040-96668bb44281"] major:1201 minor:3211 identifier:@"beacon1"];  
    [_locationManager startRangingBeaconsInRegion:region1];  
    CLBeaconRegion *region1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"8deefbb9-f738-4297-8040-96668bb44281"] major:1798 minor:2122 identifier:@"beacon2"];  
    [_locationManager startRangingBeaconsInRegion:region2]; 
    ... 
    
  2. のみUUIDに基づいて地域を監視するだけでなく、この同じ地域に測距ん同時に。あなたが見る特定のiBeaconごとにRangingコールバックを取得します。レンジングコールバックでは、表示されているビーコンのメジャー/マイナー番号をチェックし、所有しているビーコンのリストと比較します。一致が見られる場合にのみ、特定の操作を実行します。ビーコンの追加を続けると、このリストをアプリケーションに最新の状態に保つのが難しい場合があります。そのため、iBeacon識別子のリストをクラウドに保存できるようなWebサービス(ProximityKitなど)を使用したい場合があります。

    -(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { 
        for (CLBeacon *beacon in beacons) { 
        if ([self isMyBeaconWithMajor: beacon.major minor: beacon.minor]) { 
         // Yes, this is my beacon! Do something special here 
        } 
        } 
    } 
    
    -(BOOL)isMyBeaconWithMajor: (NSNumber *)major minor: (NSNumber *)minor { 
        // TODO: write code here that returns YES if the major and minor belong to you 
    } 
    

別の最終可能性(あなたが求めているものを外に確かに少しは)物事は非常に簡単になりますカスタムUUID、とビーコンを使用することです。完全開示:私はカスタマイズ可能な識別子を持つiBeaconsを販売する従業員です。

+0

は偉大な答えをいただき、ありがとうございます。私は昨日オプション2をしようとしていたが、かなり働いていなかった。それをもう一度見てみましょう。 – Chris

+0

各ビーコンにユニークなUUIDを使用すると、一度に最大20までしか監視できませんか? – random

+0

しかし、それは私が提案しているものではありません。独自の固有のProximityUUIDを定義し、自分のすべてのiBeaconsに同じものを使用すると、そのProximityUUIDを見るとiBeaconsがあなたのものであることがわかります。 – davidgyoung

-1

あなたはこのコードでメジャーとマイナーを確定することができます

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region{ 
    CLBeaconRegion *r = (CLBeaconRegion *) region; 
    NSLog(@"UUID %@, major %@, minor %@", r.proximityUUID, r.major, r.minor); 
    [self myNotification:@"You are in the region"]; 
    [self.locationManager startRangingBeaconsInRegion:r]; 
} 
+4

このデリゲートメソッドは、監視対象の領域を返します。基本的には、「ねえ、あなたが監視するように言った地域はちょうど入力されました」と、その地域を宣伝するビーコンについては何も教えてくれません。 したがって、返されるメジャー値とマイナー値は、通知をトリガーしたビーコン領域のものではなく、あなた自身のものです。 – joshblour

関連する問題