Интеграция iBeacon и периферийного устройства coreBluetooth

Я хотел бы знать, возможно ли рекламировать услуги через coreBluetooth с устройством, выступающим в качестве периферийного устройства, а также диапазоном для iBeacons, а также выполнять оба действия в фоновом режиме? По сути, цель состоит в том, чтобы определить диапазон для маяков, а затем, если маяк находится в пределах диапазона .Near или .Immediate, обновить характеристики услуги, рекламируемой устройством. Я могу с радостью выполнить задачу определения дальности, и хотя я нашел информацию об устройстве, выступающем в качестве тонкого периферийного устройства, я думаю, что смогу справиться с этим, однако, неоднократно останавливаясь из-за ограничений фоновой функциональности, я хотел знать, возможен ли этот тип сценария, прежде чем Я трачу много времени, пытаясь сделать то, что, как всем известно, невозможно. Я новичок в Swift и iOS в целом, поэтому мне нужно время, чтобы многое сделать. Мы будем очень признательны за любые советы. Спасибо


person albert shmalbert    schedule 11.12.2015    source источник


Ответы (1)


Это возможно, хотя в фоновом режиме есть ограничения.

Передний план:

  • Именно то, что вы описываете, возможно. iOS позволяет одновременно рекламировать услугу Bluetooth LE с помощью CoreBluetooth и ранжировать iBeacons с помощью CoreLocation.

Предыстория:

  • iOS ограничивает фоновое сканирование маяков с помощью API ранжирования маяков CoreLocation всего пятью секундами после первого обнаружения области маяков. Вы можете увеличить эти пять секунд сканирования до трех минут, используя технику, описанную в моем блоге здесь. Для более длительного продления требуется добавить фоновый режим местоположения в ваш Info.plist, что может затруднить утверждение вашего приложения для AppStore.

  • Реклама служб Bluetooth LE в фоновом режиме на iOS работает не так, как реклама на переднем плане. Он использует собственный метод Apple, чтобы свернуть идентификаторы службы в меньший рекламный пакет, который используется всеми приложениями, рекламирующими службы Bluetooth LE. Их может быть нелегко обнаружить устройствами Bluetooth LE, отличными от iOS:

Ключ объявления CBAdvertisementDataLocalNameKey игнорируется, и локальное имя периферийного устройства не объявляется. Все сервисные UUID, содержащиеся в значении рекламного ключа CBAdvertisementDataServiceUUIDsKey, помещаются в специальную область «переполнения»; они могут быть обнаружены только устройством iOS, которое явно сканирует их. Если все рекламные приложения работают в фоновом режиме, частота, с которой ваше периферийное устройство отправляет рекламные пакеты, может уменьшиться.

См. раздел Режим фонового выполнения периферийных устройств Bluetooth здесь для получения дополнительной информации.

person davidgyoung    schedule 11.12.2015