热点新闻
iOS 蓝牙开发 Mac地址问题
2023-08-24 11:33  浏览:6447  搜索引擎搜索“手机速企网”
温馨提示:信息一旦丢失不一定找得到,请务必收藏信息以备急用!本站所有信息均是注册会员发布如遇到侵权请联系文章中的联系方式或客服删除!
联系我时,请说明是在手机速企网看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

在蓝牙开发中,经常会遇到蓝牙Mac地址(物理地址-->唯一标记)链接的问题:
对于安卓来说,可以通过Mac地址来链接,因为他们可以获取到外设的Mac地址。
对于苹果而言,是不可以通过Mac地址链接的,因为我们无法获取外设的Mac地址。

虽然苹果给我们提供了一个外设的UUID,但是这个UUID是通过外设的Mac地址和手机的Mac地址进行加密计算得来的。

换言之,不同手机链接同一外设这个值是不同的,所以这个值并不能取代Mac地址作为唯一标记,况且安卓是没有这个UUID的。

peripheral.identifier.UUIDString;

*! * @property identifier * * @discussion The unique, persistent identifier associated with the peer. */ @property(readonly, nonatomic) NSUUID *identifier NS_AVAILABLE(10_13, 7_0);

@property (readonly, copy) NSString *UUIDString;

那iOS如何获取Mac地址呢?

方案A:硬件工程师将Mac地址写到厂商数据中,然后我们获取(扫描阶段就可以获取到)

方案B:(本质就是读取固定指令获取)读取外设的180A服务里的2A23特征值,再去进行剪切和拼接来获取(必须先链接上外设)
详情参考:https://www.jianshu.com/p/1d6a8fc8134f
但这个方案有大弊端:
1、就是我必须先链接上然后再去获取这个Mac地址,太消耗成本,且效率不高。
假如有很多设备的话,我必须一一验证,不是再断开,远没有在扫描阶段(扫描的过程是很快的,可以在短短几秒钟内就可以找到周围的上百台设备),确认是再链接高效。
2、这样会有莫名其妙的问题。
3、从链接的角度来讲有点本末倒置,本来我是用Mac地址来链接的,但现在变成了,先链接再获取Mac地址,验证是否正确。
4、仅限某些设备,如果你的蓝牙设备不支持这样获取,你需要跟硬件工程师沟通,说白了并不通用

那iOS如何链接呢?
一般我们可以通过名称、厂商数据来链接。
当手机蓝牙(此地将手机蓝牙作为中心设备)扫描到外设(譬如手环之类的)后,会进入这个方法

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementdata:(NSDictionary<NSString *, id> *)advertisementData RSSI:(NSNumber *)RSSI;

名称、厂商数据可以从advertisementData(广告数据)中读取

CB_EXTERN NSString * const CBAdvertisementDataLocalNameKey;

CB_EXTERN NSString * const CBAdvertisementDataManufacturerDataKey;

//advertisementData中可以发送的数据有约定 如下 17

具体如何保证唯一性,这个就需要和蓝牙硬件工程师约定了。
1、如果名称是唯一的,我们就可以用名称来约定唯一性。
2、如果名称相同,又要确定唯一性,那我们就需要通过厂商数据来约定了。

具体这个规则要怎么来约定唯一性,就靠彼此约定了,这个规则随意,只要彼此双方约定好就可以。

综上:
比较好的链接方案就是,苹果、安卓、硬件大家约定好一个规则,不论是通过名称或者厂商数据都可以确定唯一性通用性。

来源:http://t.zoukankan.com/lijianyi-p-14761020.html

发布人:f189****    IP:223.213.97.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发