蓝牙BLE开发——解决iOS设备获取MAC方式

解决iOS设备获取MAC方式

uniapp 解决 iOS 获取 MAC地址,在Android、iOS不同端中互通,根据MAC 地址处理相关的业务场景;

文章目录

API: onBluetoothDeviceFound

可能会遇到相关问题:请查看

关于进制转换:请点击或搜索相关文章

Desc:

  • AndroidiOS 设备得到的 deviceId 是不一致的,如果想要存储 MAC ,在后面的业务中使用,如何获取 MAC地址
  • Android:得到是 MAC
  • iOS:得到是 UUID
  • tip :不要混淆了,是否处理 MAC 根据需求,不影响设备正常连接;

监听寻找到新设备的事件

javascript 复制代码
function onBluetoothDeviceFound() {
	uni.onBluetoothDeviceFound((res) => {
		console.log('onBluetoothDeviceFound success', res)
		handleFilterDevices(res.devices);
	})
}

BLE工具效果图

APP监听设备返回数据

  • 很多人以为返回数据是空的,在App端,ArrayBuffer 数据无法直接查看,转换下打印日志也许有惊喜(⊙o⊙)

解决方式

具体数据 根据 供应商 协议去处理,因有些 供应商 返回 MAC方式不一样;

  • 监听广播数据,根据 MAC 数据存储位置,解析对应 ManufacturerData 数据段、 ServiceData 数据段;

  • MAC 在 advertisData 中: 即ManufacturerData 数据段

    javascript 复制代码
    filterDevices(devices) {
        let res = devices.filter(device => {
            if (!device.name && !device.localName) return;
    		
            // ArrayBuffer转16进制
            let advertisData = ab2hex(device.advertisData);
            console.log('advertisData To HEX:', advertisData);
            // ...
        }
    }
  • MAC 在 serviceData 中:即 ServiceData 数据段,返回对象

    • 先 转换为 Uint8Array 类型,再 转换 16进制
  • 和效果图一样,返回在 ServiceData
javascript 复制代码
filterDevices(devices) {
    let res = devices.filter(device => {
        if (!device.name && !device.localName) return;

        // 遍历 ServiceData 数据段
        let serviceData = '';
        for (let key in device.serviceData) {
            let tmpData = new Uint8Array(device.serviceData[key]);
            if (tmpData) {
                let tmpHex = ab2hex(tmpData);
                serviceData = tmpHex.join(':');
            }
        }

        device['MAC'] = serviceData;

        // ...
    }
}
  • 通过广播数据段namelocalName中通过名称匹配设备,通常: 前缀 + MAC ,直接截取就行(有些供应商会采取该方式)

ArrayBuffer转16进制

javascript 复制代码
const ab2hex = (buffer) => {
	const hexArr = Array.prototype.map.call(
		new Uint8Array(buffer),
		function(bit) {
			return ('00' + bit.toString(16)).slice(-2)
		}
	)
	return hexArr.join('')
}

微信小程序 监听设备返回数据

小程序,打印日志更直观些

MAC 数据

json 复制代码
[
    {
        "0": 172,
        "1": 35,
        "2": 53,
        "3": 153,
        "4": 83,
        "5": 133
    }
]
相关推荐
HiDev_8 天前
iOS 蓝牙开发进阶:彻底理解 CBManager(状态、权限与正确使用方式)
ios·objective-c·蓝牙·ble
墨染倾城殇12 天前
物联网智能家居灯控与全屋互联:无线技术要点与模组能力边界
蓝牙mesh·ble·低功耗模块·wifi蓝牙模块
wotaifuzao14 天前
深度解析:NFC、UWB与BLE技术的演进、核心技术与“无感交互“融合应用展望
嵌入式硬件·交互·ble·uwb·nfc·数字钥匙
Vis-Lin16 天前
BLE 协议栈:ATT 协议详解
网络·物联网·网络协议·iot·ble
Darkershadow17 天前
蓝牙学习之通过OP CODE解析输入输出数据
学习·蓝牙·ble·mesh
奔跑吧 android20 天前
【BT-SIG】【Core_v6.2】【Vol 3 Host】【Part G: GATT】【3.1 Service definition】
ble·bluetooth·gatt·蓝牙协议·bt·core_v6.2·bt-sig
奔跑吧 android20 天前
【BT-SIG】【Core_v6.2】【Vol 3 Host】【Part G: GATT】【2.Profile overview】
ble·bluetooth·协议解析·gatt·bt-sig解析·core_v6.2
嵌入式小企鹅22 天前
蓝牙学习系列(八):BLE L2CAP 协议详解
网络·学习·蓝牙·ble·协议栈·l2cap
Vis-Lin23 天前
BLE 协议栈:L2CAP 信道详解
网络·物联网·网络协议·蓝牙·iot·ble
林政硕(Cohen0415)23 天前
V821 内置蓝牙 BLE 适配
蓝牙·ble·v821