Как получить уникальный идентификатор устройства Bluetooth с помощью Core Bluetooth в iOS

Я разрабатываю приложение, которое требует, чтобы устройство ios предоставило Bluetooth UUID (чтобы получить Bluetooth UUID со сканированного/подключенного устройства), а затем отправило его на сервер для дальнейшей разработки. Я не могу найти ответ в Интернете.

Я использую основной Bluetooth для сканирования и подключения устройства, а также отправляю имя информации об устройстве и uuid, но uuid меняется каждые 15-20 минут. Как я могу распознать ранее подключенное устройство и как я могу получить уникальный BLE-устройство UUID, чтобы я мог сопоставить идентификатор с ранее добавленным списком устройств. Помогите, пожалуйста...


person Gursewak Singh    schedule 11.09.2020    source источник


Ответы (1)


Вы можете получить свойство identifier обнаруженного CBPeripheral и подключиться к нему. Если вы подключаетесь, идентификатор этого устройства не должен меняться в течение значительного времени (на практике я не думаю, что он когда-либо изменится, но теоретически может).

Получив идентификатор периферийного устройства, вы можете сохранить это значение и впоследствии получить периферийное устройство через retrievePeripherals вместо сканирования.

Проблема, с которой вы столкнетесь, заключается в том, что identifier специфичен для устройства iOS, которое обнаруживает периферийное устройство. Другое устройство iOS получит другой идентификатор для того же периферийного устройства.

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

person Paulw11    schedule 11.09.2020
comment
Хорошо @Paulw11 Спасибо. Я сохранил идентификаторы BLE во внутренней базе данных и могу искать устройство BLE с помощью retrievePeripherals, но когда я пытаюсь подключить его, произошла ошибка имени с API MISUSE: Отмена подключения для неиспользуемого периферийного устройства ‹CBPeripheral: 0x280bfd9a0, идентификатор = 3A025596-F553 -9022-9F85-9E12075D8ADE, name=iPhone, state=connecting›, ссылку на него не забыли сохранить? - person Gursewak Singh; 21.09.2020
comment
Как говорится в ошибке, вам нужно сохранить сильную ссылку на экземпляр CBPeripheral; т.е. в свойстве, а не только в локальной переменной. - person Paulw11; 21.09.2020
comment
let getData = self.centralManager.retrievePeripherals(withIdentifiers: ids) if getData.count › 0 { if getData[0].identifier.uuidString == self.carsList[i].bluetooth_identifier{ getData[0].delegate = self // self.centralManager.cancelPeripheralConnection(getData[0]) self.centralManager.connect(getData[0], options: nil) } } } когда я комментирую строку self.centralManager.cancelPeripheralConnection, это не дает никаких ошибок. но периферийная функция didConnect не вызывается. - person Gursewak Singh; 21.09.2020
comment
getData — локальная переменная. Как только это закрытие или функция выйдет, оно будет выпущено, о чем вам и говорит предупреждение. Вам необходимо иметь сильную ссылку на периферийное устройство в свойстве. - person Paulw11; 21.09.2020
comment
Не могли бы вы направить меня, как я могу это сделать. - person Gursewak Singh; 21.09.2020
comment
Могу ли я получить список подключенных устройств в приложении iOS. Например, если мой автомобильный bluetooth включен, и когда я включаю bluetooth моего телефона, он автоматически подключается к автомобильному bluetooth. Есть ли способ получить информацию о подключенном устройстве или список подключенных устройств в приложении? - person Gursewak Singh; 21.09.2020
comment
Bluetooth вашего автомобиля появится в качестве доступного аудиоустройства в av framework. Поскольку это устаревший Bluetooth, он не виден через Core Bluetooth. - person Paulw11; 21.09.2020
comment
У вас есть код и пример этого? Пожалуйста, поделитесь со мной. - person Gursewak Singh; 05.10.2020