将 Macbook 变成 iBeacon
Posted
技术标签:
【中文标题】将 Macbook 变成 iBeacon【英文标题】:Turn Macbook into iBeacon 【发布时间】:2013-10-24 23:30:38 【问题描述】:我知道我可以将 ios 设备变成 iBeacons (Can an iOS7 device act as an iBeacon?)。不幸的是,我只有一个设备,我的信标还没有到。所以我想知道如何将我的 MacBook Air(2011 年中,确实支持蓝牙 4.0)变成 iBeacon 以进行测试。是否有任何现成的应用程序可用,例如 iOS 的 airlocate?提前致谢!
【问题讨论】:
【参考方案1】:这在 OSX Mavericks 中是可能的,但在 Mountain Lion 和更早版本的操作系统中是不可能的。我的公司 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 类,因此要么在 10.9 中以其他方式完成此操作,要么我的版本存在缺陷。 是的,它可以在小牛队工作。我看到一个同事演示它。刚刚更新了我的答案以反映这一点。 OS X 10.9 支持 CBPeripheralManager,但我在 CoreLocation 中没有看到 CLBeacon 的证据。因此,尽管 Mavericks 可以像外围设备一样做广告,但我没有看到特别支持 iBeacon 的证据。请在文档中提供这方面的证据。 那么这款虚拟机是否可以与带有 USB BTLE 加密狗的 PC 一起使用? 不幸的是,不,至少使用 IOGear 蓝牙棒是不可能的。其他蓝牙棒可能会提供电源控制功能。【参考方案2】:注意:这只适用于小牛队,不适用于优胜美地。
Mavericks 在 Core Location 中没有添加到 iOS 7 的 iBeacon 支持。但是,Mavericks 现在可以充当 BLE 外围设备。鉴于 iBeacon 基本上是一个外围设备,它应该(并且确实)可以将 Mavericks 用作 iBeacon。
为了在 iOS 上创建 iBeacon,您首先创建一个 CLBeaconRegion
对象,然后使用 peripheralDataWithMeasuredPower:
方法获取一个包含必要广告数据的 NSDictionary
进行广播。如果您从 iOS 设备上获取此 NSDictionary
的内容并在 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/ 有一篇更详细的博客文章
【讨论】:
尽管您的解决方案似乎是唯一可用的解决方案,但我无法使其正常工作。我有 MacBook Retina 2013 年末安装了 Maveriks 和制造商 iBeacons 进行比较。 Air Locate iOS app 只能定位芯片,不能定位 MacBook。存折的行为相同。可以请教吗? iBeacon 无法在 MacBook 上运行的两个常见原因是 MacBook 不支持 BLE(如果您有 2013 款 MacBook,则不太可能)以及系统偏好设置中的蓝牙已关闭。另一个问题可能与 Mac 正在广播的proximityUUID
有关。【参考方案3】:
是的,有可能。看看这个github项目https://github.com/nolim1t/iBeaconAdvertisement
【讨论】:
【参考方案4】:到目前为止,我发现的最佳解决方案是 Tim Duckett 提供的解决方案:https://github.com/timd/MactsAsBeacon
只需抓取项目,设置 UUID、主要和次要值,然后单击广播。真的很简单。解决方案基于这篇博文:http://www.blendedcocoa.com/blog/2013/11/02/mavericks-as-an-ibeacon/
【讨论】:
【参考方案5】:如果您想节省 9.99 欧元,请查看 mttrb 开源客户端的最新版本。我添加了更多 GUI,以便您可以调整所有字段。 https://github.com/deadfalkon/BeaconOSX/releases 甚至还有二进制下载。
【讨论】:
不错!尤其是预编译的二进制文件可以帮助任何对 Xcode 不满意/仍然愿意支付 Apple 99 美元的人。 对于 XCode 和在本地机器上运行的代码,您不需要开发人员程序!【参考方案6】:我尝试了所有这些解决方案,但无法让 AirLocate 接收信号,直到我遵守以下规定: https://github.com/lgaches/BeaconEmitter 并开始使用此 UUID 传输: E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 并具有以下标识符: 你好
我发现这篇关于 AirLocate 的帖子也很有用: Does AirLocate only look for particular UUIDs?
【讨论】:
【参考方案7】:在 El Capitan (OS X 10.11) 下将 Mac 变成 iBeacon 的唯一实用程序是 iBeaconSwiftOSX。还报告在 Yosemite (OS X 10.10) 下工作。使用的(免费)iOS 扫描实用程序是来自 Eurelis 的 iBeacon Loc。
仅供参考:在 iOS 上,扫描器必须搜索 iBeacon 所宣传的 UUID 和主要/次要的特定组合。确保扫描仪设置和 iBeacon 设置匹配。
【讨论】:
以上是关于将 Macbook 变成 iBeacon的主要内容,如果未能解决你的问题,请参考以下文章