Как получить Mac-адрес из CBPeripheral And CBCenter

Мне нужно взять целевой MAC-адрес из входного соединения и исходящего соединения из CBPeripheral And CBCenter. Идентификатор дозы не определен в них. внешний вид был удален из iOS 7. Есть ли другой способ?

https://developer.apple.com/library/prerelease/ios/documentation/CoreBluetooth/Reference/CBPeripheral_Class/index.html

1 ответ

Решение

Вы не можете получить MAC-адрес для CBPeripheral но вы можете получить identifier свойство, которое представляет собой UUID, который iOS вычисляет из MAC среди другой информации.

Это значение может быть безопасно сохранено и использовано для идентификации того же периферийного устройства в будущем на этом конкретном устройстве iOS.

Его нельзя использовать на другом устройстве iOS для идентификации того же периферийного устройства.

Вы можете без проблем получить доступ к MAC-АДРЕСУ в iOS 12. Чтобы получить MAC-адрес, вам необходимо выполнить следующие шаги.

  1. Разберите данные, полученные устройством BLE, в строку.
extension Data{
func hexEncodedString() -> String {
        let hexDigits = Array("0123456789abcdef".utf16)
        var hexChars = [UTF16.CodeUnit]()
        hexChars.reserveCapacity(count * 2)

        for byte in self {
            let (index1, index2) = Int(byte).quotientAndRemainder(dividingBy: 16)
            hexChars.insert(hexDigits[index2], at: 0)
            hexChars.insert(hexDigits[index1], at: 0)
        }
        return String(utf16CodeUnits: hexChars, count: hexChars.count)
    }
}

  1. Добавьте к адресу разделитель ":".
extension String {
    func separate(every stride: Int = 4, with separator: Character = " ") -> String {
        return String(enumerated().map { $0 > 0 && $0 % stride == 0 ? [separator, $1] : [$1]}.joined())
    }
}
  1. В didReadValueForCharacteristic(характеристика: CBCharacteritic) вы можете использовать предыдущие 2 функции для получения MAC-адреса.
func didReadValueForCharacteristic(_ characteristic: CBCharacteristic) {
if characteristic.uuid == BleDeviceProfile.MAC_ADDRESS, let mac_address = characteristic.value?.hexEncodedString().uppercased(){
            let macAddress = mac_address.separate(every: 2, with: ":")
            print("MAC_ADDRESS: \(macAddress)")
        }
}
  1. наслаждайтесь своим MAC-адресом: "MAC_ADDRESS: 00:0A:57:4E:86:F2"
Другие вопросы по тегам