将 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 类采用 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/ 有一篇更详细的博客文章

【讨论】:

尽管您的解决方案似乎是唯一可用的解决方案,但我无法使其正常工作。我有 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的主要内容,如果未能解决你的问题,请参考以下文章

macbook 安装laravel5.4

MacBook Pro/Air 下使用 linux ubuntu 系统 波浪号“~”变成其他 符号 的完美解决办法

macbook浏览器状态栏变宽

macbook中使用彩色的ls

macbook怎么设置开机启动软件

MacBook下载和编译Android AOSP源码