2016-09-21 1 views
4

Во-первых: у меня iPad Air 2 и iPhone 7. Для дальнейшего чтения мы оцениваем, что приложение активно и открыто на iPad и в фоновом режиме на iPhone. Приложение точно такое же, даже с теми же идентификаторами UUID службы Bluetooth и тем же DataLocalNameKey.Реклама на CoreBluetooth в фоновом режиме на iOS 10

Я хочу написать приложение, которое может рекламировать услугу Bluetooth в фоновом режиме и может открыть эту услугу (оптимально и в фоновом режиме). As I already read Я не могу использовать технологию beacon яблок, потому что там можно получить сканирование/уведомление маяками в фоновом режиме (я тестировал это, отлично работает), но не для рекламы. Поэтому я начал использовать CoreBluetooth, как описано в вышеупомянутом ответе SO, потому что там можно рекламировать в фоновом режиме.

Мое приложение вызывает didDiscoverPeripheral метод в CBCentralManagerDelegate на iPhone (приложение в фоновом режиме), поэтому он обнаружил iPad. Свойство CBPeripheralManager на iPhone - isAdvertising - true. Но didDiscoverPeripheral не вызывается на iPad. Я немного смущен. Один из вариантов - мой iPad не может больше обнаруживать iPhone по некоторым причинам или мой iPhone лежит, и это не реклама.

Так что я думал, что я просто немного глуп и искал Google для приложений отладки CoreBluetooth. Я нашел Vicinity и AltBeacon. И с обоими приложениями поведение одинаково! Если вы воспользуетесь фоном (нажмите кнопку «домой/сна») рекламного приложения, приложение просмотра больше не сможет его обнаружить. Если вы откроете фоновое приложение, оно мгновенно откроет его. В обоих приложениях упоминается, что с ними можно транслировать в фоновом режиме.

Я делаю что-то неправильно; такое поведение ожидается? Я неправильно понял рамки? Можете ли вы подтвердить это поведение?

Для подтверждения этого самым быстрым способом является установка Vicinity на двух устройствах (вы должны добавить ключ NSBluetoothPeripheralUsageDescription в Info.plist), чтобы установить одно устройство для трансляции и нажать кнопку «Домой».

ответ

4

Это не что-то особенное для iOS 10 - это всегда было так на iOS. На iOS приложения просто не могут отправлять стандартные рекламные объявления Bluetooth LE, когда они находятся на заднем плане. Они должны быть на переднем плане, чтобы сделать это.

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

Вот как Apple, описывает это:

... Вы должны знать, что реклама, когда ваше приложение находится в фоновом режиме, работает иначе, чем когда ваше приложение находится на переднем плане. В частности, когда ваше приложение реклама времени в фоновом режиме:

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

Подробнее здесь: https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

+0

Хорошо. Я добавил службу моему рекламодателю, например 'cbPeripheralManager! .add (CBMutableService (type: random cbuuid, primary: true)). И я добавил этот uuid к 'scanForPeripheralsWithServices'. Итак, все упомянутое яблоко заполнено здесь: на стороне рекламы есть ServiceUUID, и у меня есть устройство iOS, которое явно сканирует его. Не работайте в любом случае. – flashspys

+1

В области переполнения может быть недостаточно места, если у вас установлены другие приложения, которые рекламируются в фоновом режиме. Попробуйте удалить эти приложения, так как кажется, что вы попробовали несколько. – davidgyoung

+2

Я удалил все свои приложения и переустановил приложение dev. Ничего не изменилось – flashspys

Смежные вопросы