将Macbook变成iBeacon

38

我知道我可以将iOS设备变成iBeacon (iOS7设备可以充当iBeacon吗?)。不幸的是,我只有一台设备,而我的信标还没有到货。因此,我想知道如何将我的MacBook Air(Mid-2011,支持蓝牙4.0)变成iBeacon进行测试。是否有任何现成的应用程序可供使用,就像iOS的airlocate一样?提前感谢!

7个回答

22

注意:这仅适用于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类使用proximityUUIDmajorminor和校准功率值,并创建一个可传递给Mavericks上的CBPeripheralManagerstartAdvertising:方法的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/ 上写了一篇更加详细的博客文章。


尽管您的解决方案似乎是目前唯一可用的,但我无法使其工作。我有一台安装了Maveriks的MacBook Retina晚期2013年型号和制造商iBeacons进行比较。Air Locate iOS应用程序只能对芯片进行范围设置,而不能对MacBook进行范围设置。Passbook的行为也相同。请问您能给予建议吗? - Yevhen Dubinin
1
iBeacon在MacBook上无法工作的两个常见原因是MacBook不支持BLE(如果您有2013年的MacBook,则不太可能)和蓝牙在系统偏好设置中被关闭。另一个问题可能与Mac正在广播的“proximityUUID”有关。 - mttrb

15

4
这在OSX Mavericks中是可能的,但在Mountain Lion和OS的早期版本中则不行。我的公司Radius Networks开发了一个MacBeacon应用程序,在Mavericks上可以实现此功能。
在OSX Mountain Lion中,与iOS 6+不同,没有内置支持蓝牙外设模式,你需要像iBeacon一样进行广告。这意味着你需要编写自己的低级蓝牙代码,这并不容易。
但是,对于较旧的操作系统有一个解决方案。我在我的Mac上配对了一个外部蓝牙适配器,并运行Linux的VirtualBox VM,实现了你要寻找的功能。我的公司在此提供了该VM的免费下载:http://developer.radiusnetworks.com/ibeacon/

根据 mavrick 10.9 的文档,这应该是可能的。但是我无论如何都无法让它运行起来。我无法在10.9中找到CLBeacon类,所以要么这是以其他方式完成的,要么我的版本有缺陷。 - Ronny Khan
没错,它可以在Mavericks上运行。我看到一个同事演示过。我刚刚更新了我的答案以反映这一点。 - davidgyoung
OS X 10.9支持CBPeripheralManager,但我在CoreLocation中没有看到CLBeacon的证据。因此,尽管Mavericks可以像外设一样进行广告,但我没有看到特定的iBeacon支持证据。请在文档中提供证据。 - Bob Kressin
这个虚拟机能够在带有USB BTLE dongle的PC上工作吗? - Brad Parks
1
很遗憾,至少使用IOGear蓝牙适配器是不可能的。其他蓝牙适配器可能提供电源控制功能。 - davidgyoung
显示剩余2条评论

4

不错!特别是预编译的二进制文件,对于那些不熟悉Xcode或仍在考虑支付苹果99美元的人来说非常有帮助。 - Simon B.
3
对于XCode以及在本地机器上运行代码,您不需要开发者计划! - volkersfreunde

3

1
在El Capitan (OS X 10.11)下,我唯一试过可行的将Mac变成iBeacon的工具是iBeaconSwiftOSX。据报道,它也可以在Yosemite (OS X 10.10)下使用。使用的(iOS免费)扫描工具是来自Eurelis的iBeacon Loc
FYI: 在iOS上,扫描器必须搜索由iBeacon广告的UUID和major/minor的特定组合。确保扫描器设置和iBeacon设置匹配。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接