didDiscoverPeripheral: иногда не работает на фоне - PullRequest
1 голос
/ 04 октября 2019

Происходит как на iOS 12 & iOS 13.

У меня Bluetooth-central правильно добавлено на моих Info.plist

Я указываю список UUIDs службы

То, что я вижу:

  • Если я взаимодействую с нашим устройством BLE на переднем плане, я все равно могу сканировать его на заднем плане, даже спустя часы и дни, пока я этого не сделаювыключите Bluetooth или перезапустите устройство iOS.
  • Если я никогда не взаимодействовал с ним при открытом приложении, или если я перезагружаю устройство или выключаю Bluetooth на устройстве, то при сканировании в фоновом режиме,didDiscoverPeripheral: никогда не вызывается, пока я не открою приложение, которое вызывает didDiscoverPeripheral: мгновенно.
  • Если я использую retrievePeripheralsWithIdentifiers: и iOs могут вернуть объект "кэширован", тогда я могу пропустить сканирование и подключиться напрямую, чтоработает отлично. Но иногда retrievePeripheralsWithIdentifiers: не возвращает объект, поэтому я не всегда могу передать это (и заставляет пользователя сначала взаимодействовать с нашим устройством на переднем плане)

1 Ответ

0 голосов
/ 01 ноября 2019

Итак, после некоторого перерыва между мной и нашей командой разработчиков микропрограммного обеспечения мы нашли причину наших проблем.

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

По этой причине, когда приложение сканировало новое устройство, оно не находилочто-нибудь с этим UUID службы, но как только он обнаружит его с открытым приложением, он будет кешировать его внутренне с помощью своих служб, и с этого момента он будет работать даже в фоновом режиме (потому что он уже знает, какие службы имеет это устройство).

Исправление заключалось в том, чтобы включить этот UUID службы в первый рекламный пакет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...