子类ClBeacon存储一些额外的信息

时间:2014-03-27 15:01:42

标签: ios cllocationmanager cllocation ibeacon

可以使CLBeacon的子类存储一些额外的信息并在委托方法中处理这些信息

- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region

其中beaconsMyCustomBeaconSubclass

的数组

2 个答案:

答案 0 :(得分:3)

是的,这是可能的。各种框架都是这样做的。关键是您还必须围绕CoreLocation函数编写包装类,以便在获得didRangeBeaconsInRegion回调时,获得子类的实例而不是CLBeacon类。

构建所有这些包装类可能很复杂,使用现成的框架通常更容易。我的公司提供一个名为ProximityKit的名称,允许您将额外信息作为键/值对附加到iBeacons。您可以使用Web界面为云中的iBeacons分配键/值对。然后使用ProximityKit类对iBeacons进行测距,这样您就可以完全按照自己的描述访问额外的信息。

这里的示例检索名为" messageForUser"的字段的值。来自远程iBeacon。请注意,这使用了CLBeacon的子类PKIBeacon

- (void)proximityKit:(PKManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(PKRegion *)region {
    [beacons enumerateObjectsUsingBlock:^(id beaconObj, NSUInteger beaconIdx, BOOL *beaconStop) {        
        PKIBeacon *beacon = (PKIBeacon *) beaconObj;        
        // The value of messageForUser is set in the ProximityKit web interface
        NSString *messageForUser = [beacon.attributes objectForKey:@"messageForUser"]; 
        NSLog(@"The value of messageForUser for iBeacon %@ %ld %ld is: %@", beacon.uuid, beacon.major, beacon.minor, messageForUser);
    }];
}

完全披露:我是Radius Networks的总工程师。

答案 1 :(得分:0)

是的,您可以创建CLBeacon的子类,但是您需要使用从CoreLocation接收的CLBeacon对象手动实例化它

让我们调用你的子类MyBeacon,你必须创建一个像

这样的init方法
- (id)initWithBeacon:(CLBeacon *)beacon

因为CoreLocation只返回CLBeacon对象而不是MyBeacon对象,所以你需要自己创建MyBeacon对象。