Технические вопросы и ответы QA1753

Добрый день по Bluetooth на iOS 5 и Позже

Q: После принятия iOS 5 SDK мое приложение больше не видит службы Bonjour по Bluetooth. Что продолжается здесь?

A: Когда Добрый день по поддержке Bluetooth был добавлен в iOS 3.0, политика по умолчанию состояла в том, что это должно быть включено для всех приложений. Т.е. Добрый день приложение работало бы по Bluetooth, если это явно не выбрало из того поведения.

Эта политика изменилась в iOS 5.0. Новая политика состоит в том, что Добрый день приложение должно явно выбрать в к поддержке Bluetooth. Это изменение было внесено для сокращения интерференции с Wi-Fi. Для обеспечения совместимости на уровне двоичных кодов это изменение только включено для приложений, соединяющихся с iOS 5.0 SDK (или позже). Это объясняет, почему Ваш предыдущий двоичный файл приложения продолжает видеть службы Bonjour по Bluetooth, но Ваш последний двоичный файл, созданный с современным SDK, не делает.

iOS 7 представил новое свойство NSNetService, includesPeerToPeer, то, что можно установить для явного включения регистрации и открытия по Bluetooth. Если Ваше выполнение приложения на iOS 7 и позже, можно просто установить то свойство, и Вы сделаны.

Если Ваше выполнение приложения на iOS 5 или 6 и Вы хотите повторно включить Добрый день по Bluetooth, необходимо переключить на использование низкоуровневого DNS-SD API (<dns_sd.h>). Для примера того, как интегрировать DNS-SD API в приложение Какао, смотрите на Пример кода 'DNSSDObjects'.

Как только Вы приняли DNS-SD API, можно установить interfaceIndex параметр для явного управления интерфейсами, по которым это работает. Стандартное значение для этого параметра, kDNSServiceInterfaceIndexAny, приводит к политике по умолчанию, как объяснено выше. Можно изменить это путем передачи в kDNSServiceFlagsIncludeP2P флаг, как показано в Таблице 1. Также можно просмотреть для служб по Bluetooth, и только по Bluetooth, путем передачи kDNSServiceInterfaceIndexP2P к interfaceIndex параметр.

Табличный 1  DNS-SD kDNSServiceInterfaceIndexAny поведение

Версия ОС

Версия SDK

kDNSServiceFlagsIncludeP2P

Поведение

<5.0

любой

любое значение

все интерфейсы, включая Bluetooth

≥ 5.0

≥ 5.0

ясный

все интерфейсы, исключая Bluetooth

≥ 5.0

любой

набор

все интерфейсы, включая Bluetooth



История версии документа


ДатаПримечания
14.11.2013

Обновленный для отражения изменений в iOS 7 (r. 10264938).

05.01.2012

Обновленный для ссылки на новый пример кода DNSSDObjects.

19.10.2011

Новый документ, описывающий, как Добрый день по Bluetooth изменился в iOS 5 и позже.