可以使CLBeacon
的子类存储一些额外的信息并在委托方法中处理这些信息
- (void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region
其中beacons
是MyCustomBeaconSubclass
答案 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对象。