2014-01-04 2 views
1

Я прочитал каждую связанную с этим информацию, но все еще не могу заставить мое устройство iOS7 работать как периферийный рекламодатель в фоновом режиме. Он отлично работает на переднем плане, но в фоновом режиме я даже могу его обнаружить. Я добавил Приложение делится данными, используя CoreBluetooth в файле plist. Я читал, что после выхода в фоновом режиме он помещает мой пользовательский UUID в данные переполнения. Я тоже попробовал этот (но не повезло).Создание периферийного устройства iOS7 BLE для работы в фоновом режиме

NSDictionary *advertisingData = @{ 
CBAdvertisementDataServiceUUIDsKey : @[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID], 
CBAdvertisementDataOverflowServiceUUIDsKey : @[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID] 
}; 
[manager startAdvertising:advertisingData]; 

В центральном с другой стороны (MAC OS приложением), я сканируя только для моего: TRANSFER_SERVICE_UUID обслуживания. Есть ли что-то, что я пропустил, что я должен реализовать дополнительно в центральной части?

ответ

3

Примечание эта строка из документации startAdvertising: метода:

В то время как приложение работает в фоновом режиме, локальное имя не будет использоваться, и все UUID, услуги будут размещены в «перелива» области. Однако приложения, которые не указали фоновый режим «bluetooth-peripheral», не смогут рекламировать что-либо в фоновом режиме.

То есть, периферийное удаляет фоновый каждую вещь из рекламы и только его присутствие может быть обнаружено не являющихся IOS приложений. Приложения iOS могут достигать области переполнения, но приложения MacOS не могут. Вам нужно отключить фильтрацию служб на стороне MacOS, чтобы можно было обнаружить периферийное устройство и подключиться к нему, чтобы узнать, есть ли у него поисковая служба.

FYI, нет обходного пути для этого сценария, он несколько раз обсуждался в списке рассылки Apple bluetooth-dev и во многих вопросах SO.

Также обратите внимание, что CBAdvertisementDataOverflowServiceUUIDsKey не является действительной клавишей ввода для startAdvertising:. CBAdvertisementDataOverflowServiceUUIDsKey возвращается iOS в обратном вызове didDiscoverPeripheral, если он нашел что-то в области переполнения. Используйте только CBAdvertisementDataServiceUUIDsKey, чтобы определить список рекламируемых услуг.

+0

TNX чувак, выключая фильтрацию на центральном уровне MAC, работает для меня. и о заметке CBAdvertisementDataLocalNameKey также действительный ввод для startAdvertising! –

+0

Да, это было немного неоднозначно. Я имел в виду два упомянутых ключа. Изменит ответ, чтобы уточнить. – allprog

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