Я работаю над приложением для iPhone и Mac OS X, которое позволяет блокировать и разблокировать Mac с расстояния. Означает, что если уровень сигнала ниже определенного порога или соединение потеряно, он заблокирует Mac.
Я работаю с Apple CoreBluetooth framework для BTLE, используя iPhone в качестве периферийного устройства и Mac в качестве центрального. Все идет нормально. Он также работает очень хорошо, но когда я отправляю приложение в фоновый режим на iPhone, кажется, что реклама меняется. IPhone все еще рекламируется, но без профиля обслуживания и характеристик, которые я использую в приложении. Хотя это не проблема, когда iPhone все еще находится в зоне действия Mac, поскольку он все еще подключен и характеристики не используются в центральном устройстве, это становится проблемой после перемещения iPhone за пределы диапазона. Как и ожидалось, Mac блокируется и начинает обнаруживать, чтобы повторно подключить iPhone и разблокировать в случае успеха.
Но в этом обнаружении я использую указанный профиль службы и характеристики только для получения устройств, на которых запущено мое приложение, и для определения того, которое нужно разблокировать.
Я попробовал обходной путь, обнаружив без профиля службы и определив правильное устройство по его UUID, который я сохранил, когда начал использовать этот iPhone для блокировки и разблокировки. Этот обходной путь также работает в небольшом объеме, потому что, когда я выключаю Bluetooth на iPhone и включаю его снова, он получает другой UUID. Это ограничение, с которым я мог бы жить, но оно также меняет UUID через несколько часов, и тогда разблокировка не работает.
Может, кто-то уже работал над подобным приложением и знает, как исправить такую проблему? Или вы знаете статическое значение, которое я могу использовать для идентификации устройства?
1 ответ
Кажется, что, как обычно, у Apple в своей структуре происходят странные и уникальные вещи. Когда вы размещаете рекламу с устройства iOS (например, вашего iPhone), есть две «области хранения» для рекламы - обычная, которую может видеть любое сканируемое устройство, и «переполненная», которую могут видеть только Устройства iOS, которые специально сканируют его. Когда ваше приложение рекламируется в фоновом режиме, все UUID сервисов, которые вы рекламируете, к сожалению, попадают в эту область переполнения, поэтому похоже, что это могут видеть только другие устройства iOS, а не ваш Mac. Из документации CBPeripheralManager:
Любые универсальные уникальные идентификаторы службы (UUID), содержащиеся в значении ключа CBAdvertiseDataServiceUUIDsKey, которые не помещаются в выделенное пространство, добавляются в специальную область «переполнения»; они могут быть обнаружены только устройством iOS, которое явно сканирует их. Пока ваше приложение работает в фоновом режиме, локальное имя не объявляется, и все UUID службы помещаются в область переполнения.
Похожие вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].