我知道我可以将iOS设备变成iBeacon (iOS7设备可以充当iBeacon吗?)。不幸的是,我只有一台设备,而我的信标还没有到货。因此,我想知道如何将我的MacBook Air(Mid-2011,支持蓝牙4.0)变成iBeacon进行测试。是否有任何现成的应用程序可供使用,就像iOS的airlocate一样?提前感谢!
我知道我可以将iOS设备变成iBeacon (iOS7设备可以充当iBeacon吗?)。不幸的是,我只有一台设备,而我的信标还没有到货。因此,我想知道如何将我的MacBook Air(Mid-2011,支持蓝牙4.0)变成iBeacon进行测试。是否有任何现成的应用程序可供使用,就像iOS的airlocate一样?提前感谢!
注意:这仅适用于Mavericks,不适用于Yosemite。
Mavericks没有iOS 7中添加到Core Location的iBeacon支持。但是,Mavericks现在具有作为BLE外设设备的能力。鉴于iBeacon基本上是一个外设,因此可以(实际上也是)使用Mavericks作为iBeacon。
要在iOS上创建iBeacon,首先创建一个CLBeaconRegion
对象,然后使用peripheralDataWithMeasuredPower:
方法获取包含必要广告数据的NSDictionary
以进行广播。如果您将此NSDictionary
的内容从iOS设备复制到Mavericks上,则可以获得iBeacon。
我创建了一个类,使此过程更加简单并允许您直接在Mavericks上生成广告数据字典。源代码可在https://github.com/mttrb/BeaconOSX上找到。
BLCBeaconAdvertisementData
类使用proximityUUID
、major
、minor
和校准功率值,并创建一个可传递给Mavericks上的CBPeripheralManager
的startAdvertising:
方法的NSDictionary
。
BLCBeaconAdvertisementData
类非常简单。主要工作由以下方法完成:
- (NSDictionary *)beaconAdvertisement {
NSString *beaconKey = @"kCBAdvDataAppleBeaconKey";
unsigned char advertisementBytes[21] = {0};
[self.proximityUUID getUUIDBytes:(unsigned char *)&advertisementBytes];
advertisementBytes[16] = (unsigned char)(self.major >> 8);
advertisementBytes[17] = (unsigned char)(self.major & 255);
advertisementBytes[18] = (unsigned char)(self.minor >> 8);
advertisementBytes[19] = (unsigned char)(self.minor & 255);
advertisementBytes[20] = self.measuredPower;
NSMutableData *advertisement = [NSMutableData dataWithBytes:advertisementBytes length:21];
return [NSDictionary dictionaryWithObject:advertisement forKey:beaconKey];
}
我在 http://www.blendedcocoa.com/blog/2013/11/02/mavericks-as-an-ibeacon/ 上写了一篇更加详细的博客文章。
我尝试了所有这些解决方案,但直到我遵循以下步骤,才成功使AirLocate接收到信号:
1. 下载https://github.com/lgaches/BeaconEmitter
2. 使用以下UUID开始广播: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
3. 广播的标识符为: hello
我还发现下面这篇关于AirLocate的文章很有用: AirLocate只搜索特定的UUID吗?