manager?.scanForPeripherals(withServices: [CBUUID.init(string: "FE50")], options: [CBCentralManagerScanOptionAllowDuplicatesKey: true])
<key>UIBackgroundModes</key>
<array>
<string>bluetooth-central</string>
<string>bluetooth-peripheral</string>
</array>
Я включил фоновый режим и добавил [CBUUID] служб во время сканирования.
Я могу найти устройство в этом сервисе, когда я нахожусь на переднем плане, но я не могу найти устройство в фоновом режиме.
Приложение должно быть подключено к устройству с дверным замком. Если RSSI> -50 при сканировании, откройте дверцу после подключения. Если RSSI <-70, отмените соединение. Такой паттерн поведения нормален для переднего плана, но не нормален для фона.
Пожалуйста, дайте мне совет, я застрял на 1 неделю! Я буду очень благодарен.
Я знаю, но это не вызывает didDiscover в фоновом режиме.
Обнаруживали ли вы ранее периферийное устройство на переднем плане до того, как приложение перешло в фоновый режим?
Вы уверены, что эта услуга действительно рекламируется периферийным устройством? Вы получаете вызов didDiscover
с этой строкой сканирования, когда ваше приложение находится на переднем плане.
Я могу найти устройство в этом сервисе, когда нахожусь на переднем плане.
Вы можете описать процесс тестирования? например Приложение прекращено. Периферийное устройство выключено. Запустить приложение. Нажмите домой, чтобы перевести приложение в фоновый режим. Включите периферийное устройство.
Приложение должно быть подключено к устройству с дверным замком. Если RSSI> -50 при сканировании, откройте дверцу после подключения. Если RSSI <-70, отмените соединение. Такой паттерн поведения нормален для переднего плана, но не нормален для фона.
Как я уже сказал в своем первом комментарии, вы не можете многократно сканировать в фоновом режиме. Если данное периферийное устройство когда-либо было обнаружено во время текущего выполнения приложения, вы не получите обратного вызова didDiscover
, когда оно работает в фоновом режиме. Обычно у вас будет просто ожидающий connect
, который завершится в фоновом режиме, когда блокировка окажется в пределах допустимого диапазона.
Следовательно, когда я нахожусь в фоновом режиме, я не могу использовать RSSI для открытия или отключения, верно?
Если вы подключены, вы можете выдать прочитанный RSSI, но вы не можете полагаться на повторяющиеся индикаторы RSSI, которые вы получаете в didDiscover.
Я обнаружил, что приложение может читать RSSI только в течение нескольких секунд в фоновом режиме.
Вы можете вызвать в beginBackgroundTask
, чтобы получить до 3 минут фонового выполнения
Я это примерно понимаю, большое спасибо за ответ.
Я думаю, что iOs активирует ваш фоновый мод только на несколько минут. если вы хотите продержаться дольше часа, вам нужно кое-что сделать. Это хороший источник, если вы хотите сделать его длиннее, но, как мне кажется, меня не одобрят в магазине.
Я исправляю свое повествование и не буду сканировать, когда перейду на задний план.
Вы объявили, что он должен делать в appplicationWillResignActive?
нет, что мне делать в appplicationWillResignActive?
Клавиша
allowDuplicates
не работает в фоновом режиме, поэтому вы получите только один вызовdidDiscover
для данного периферийного устройства.