7

Air Locate の例を使用し、uuid のみで iBeacons を監視しています。入った地域イベントを取得すると、uuid のみを探している場合、イベントをトリガーしたビーコン/地域からメジャーとマイナーを取得できないようです (次の方法で uuid を監視している場合は取得できます)。メジャーとマイナーを指定)-これを行う方法を知っている人はいますか/何か不足していますか?

私は実際には測距を開始したくありません - する必要があるようには思えません..

(ユースケースは、同じ uuid を持つビーコンを持つすべてのストアを例に挙げて、そのストアに関する関連情報 (メジャーとマイナーを照会することによって取得される) を含む OS 通知を発行することです)

基本的に私がしていることは次のとおりです。

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
identifier:@"blah"];
region.notifyOnEntry = YES;
region.notifyOnExit = YES;
region.notifyEntryStateOnDisplay = YES;

[self.locationManager startMonitoringForRegion:region];

次に、アプリのデリゲートで:

- (void) locationManager:(CLocationManager*)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion*)region {

    // assume for now its the iBeacon
    CLBeaconRegion *beaconRegion = (CLBeaconRegion*) region;

    beaconRegion.major  // hasn't been set...

}

どうもありがとう!

4

3 に答える 3

20

あなたは何も悪いことをしていません。驚くかもしれませんが、モニタリング API は、地域の変更をトリガーした特定のビーコンを提供しません。

CLBeaconRegion オブジェクトにメジャーが設定されていない理由は、監視を開始するために使用したのとまったく同じオブジェクトであり、そのフィールドを nil に設定した (またはまったく設定せずに nil のままにした) ためです。探しているのは、CLBeacon オブジェクトの追加配列です。そして、あなたが示唆するように、これはRanging APIにのみ存在します.

測距を開始することは、実際には大したことではありません。監視を開始すると同時に設定するだけです。

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
identifier:@"blah"];
region.notifyOnEntry = YES;
region.notifyOnExit = YES;
region.notifyEntryStateOnDisplay = YES;

[self.locationManager startMonitoringForRegion:region]; 
[self.locationManager startRangingBeaconsInRegion:region]; 

また、最初のレンジング コールだけを気にする場合は、フラグを使用して以降の更新を無視できます。

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    if (!_firstOneSeen) { 
        // Do something with beacons array here
    }
}

そして、その地域を離れるときにそのフラグをリセットします

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    _firstOneSeen = NO;
}

おまけとして、これにより、アプリがフォアグラウンドにある場合の監視応答時間も大幅に短縮されます。参照: http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html

于 2013-11-22T03:06:28.947 に答える
0
  • CLBeaconRegion は、ビーコンを検索するためのフィルター基準です。したがって、「didEnterRegion」デリゲートが起動したときに返されるものを渡します。そこに驚きはありません。

  • CLBeacon は、didEnterRegion デリゲートを起動するためにフィルター条件に適合する必要がある個々のビーコンです。したがって、ここにメジャー値とマイナー値があります。起動したビーコンを取得するには、測距 API の startRangingBeaconsInRegion を呼び出して、測距を停止する前に 5 カウントする必要があります。didEnterRegion コールバックを取得した後にこれを行います。これは、アプリを起動したくない場合に、ビーコンのバックグラウンド モニタリングに適しています。ただし、よりターゲットを絞った広告キャンペーンのために、ユーザーがサーバー上でインテリジェンスを構築するためのビーコンを通過したときにメモしておいてください。

レンジングでビーコンが見つからない場合があります。その場合、startRangingBeaconsInRegion のコールバックで beaconRegion を使用して、誰かがビーコン領域に入ったことに注意してください。

于 2014-08-18T20:20:34.767 に答える