Я разрабатываю инфраструктуру iOS для обработки нескольких устройств BLE (все одинаковые). На данный момент все работает очень хорошо, кроме одного:
Клиент хочет список с доступными устройствами. Но как я могу обнаружить, когда устройство, которое было обнаружено в прошлом, больше не доступно?
Другая проблема возникает, когда я пытаюсь подключиться к устройству, которое больше не доступно. Документация гласит: попытки подключения никогда не выходят за пределы времени и
И да, я никогда не получаю ошибку через didFailToConnectPeripheral.
Я провел некоторое исследование, но не смог понять, как правильно справляться с этими проблемами через CoreBluetooth. Поэтому я разработал свои собственные решения, но я не уверен, что это правильный путь (или, по крайней мере, хороший способ, потому что может быть несколько способов сделать это).
1. Обнаружение устройств, которые больше не доступны
Я сканирую
[_centralManager scanForPeripheralsWithServices:services options:@{CBCentralManagerScanOptionAllowDuplicatesKey: @(TRUE)}];
поэтому я получаю рекламу все время, пока устройство не подключено. Я проверяю таймером, что реклама повторно задерживается в заданный интервал времени (достаточно большой, соответствующий интервалу объявления устройств). Если реклама не произошла в интервале, я удаляю устройство из списка.
2. Обнаружение таймаута подключения Ну, это довольно легкий, я думаю. Я использую свою собственную функцию тайм-аута и отменяю запрос на соединение, если таймер истекает.
Если кто-то когда-либо сталкивался с этой проблемой, мне было бы очень интересно ваше мнение и/или ваше решение, конечно.
ОБНОВЛЕНИЕ 2014-12-17:
Тем временем я работал над своим решением, используя таймеры, и, похоже, он работает очень хорошо.
Тайм-аут соединения выполняется прямо. Просто установите таймер на 5 секунд или то, что вы считаете полезным для вас. Если таймер истекает, и устройство не подключилось, просто отмените соединение и сообщите пользователю, что возникла проблема.
Обнаружение устройств, выходящих за пределы диапазона, было несколько сложнее. Для каждого обнаруженного устройства я запускаю таймер, который срабатывает через два раза, устройство отправляет рекламные объявления. Если устройство отправляет еще одно объявление до истечения таймера, оно, вероятно, выходит за пределы диапазона или отключено или подключено к другому устройству.
Я не хочу отвечать на свой вопрос, потому что надеюсь, что Apple однажды сможет позаботиться об этих проблемах.