【问题标题】:Wrong proximity UUID错误的接近 UUID
【发布时间】:2018-07-05 20:42:16
【问题描述】:

我正在开发一个应用程序,我需要在其中显示我周围的蓝牙设备列表,其中邻近 UUID 包含某个子字符串。我克隆了 repo https://github.com/mlwelles/BeaconScanner 并在我的计算机上运行了该应用程序,它正确地找到了我拥有的两个信标。他们使用下面的代码来解析广告数据。

+(HGBeacon *)beaconWithManufacturerAdvertisementData:(NSData *)data {
    if ([data length] != 25) {
        return nil;
    }

    u_int16_t companyIdentifier,major,minor = 0;

    int8_t measuredPower,dataType, dataLength = 0;
    char uuidBytes[17] = {0};

    NSRange companyIDRange = NSMakeRange(0,2);
    [data getBytes:&companyIdentifier range:companyIDRange];
    if (companyIdentifier != 0x4C) {
        return nil;
    }
    NSRange dataTypeRange = NSMakeRange(2,1);
    [data getBytes:&dataType range:dataTypeRange];
    if (dataType != 0x02) {
        return nil;
    }
    NSRange dataLengthRange = NSMakeRange(3,1);
    [data getBytes:&dataLength range:dataLengthRange];
    if (dataLength != 0x15) {
        return nil;
    }

    NSRange uuidRange = NSMakeRange(4, 16);
    NSRange majorRange = NSMakeRange(20, 2);
    NSRange minorRange = NSMakeRange(22, 2);
    NSRange powerRange = NSMakeRange(24, 1);
    [data getBytes:&uuidBytes range:uuidRange];
    NSUUID *proximityUUID = [[NSUUID alloc] initWithUUIDBytes:(const unsigned char*)&uuidBytes];
    [data getBytes:&major range:majorRange];
    major = (major >> 8) | (major << 8);
    [data getBytes:&minor range:minorRange];
    minor = (minor >> 8) | (minor << 8);
    [data getBytes:&measuredPower range:powerRange];
    HGBeacon *beaconAdvertisementData = [[HGBeacon alloc] initWithProximityUUID:proximityUUID
                                                                          major:[NSNumber numberWithUnsignedInteger:major]
                                                                          minor:[NSNumber numberWithUnsignedInteger:minor]
                                                                  measuredPower:[NSNumber numberWithShort:measuredPower]];
    return beaconAdvertisementData;
}

我采用了这段代码,进行了相应的调整,并将其包含在我的 iOS 代码中,但是找到的设备的 UUID 与 MacOS 应用程序上显示的完全不同。

有谁知道 iOS 和 MacOS 之间的广告数据有什么不同吗?

谢谢

【问题讨论】:

    标签: swift ibeacon core-bluetooth


    【解决方案1】:

    您在 iOS 上阅读的NSData 可能不是与您的信标关联的制造商广告数据。如果字节模式与 iBeacon 帧匹配,Apple 实际上会阻止在 iOS 上传输此数据。请参阅我关于 here 的博客文章。

    您确定这是您在 iOS 上运行的确切代码吗?因为如果是这样,我希望它永远找不到到达方法底部并解析 ProximityUUID 所需的 4c 02 15 字节序列。

    如果您的代码以某种方式绕过了 iOS 上的这些检查,则可能是您正在解析一些其他任意数据包,而这些数据包根本不是 iBeacon 帧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      相关资源
      最近更新 更多