2013-12-13 2 views
5

Я немного смущен важностью CLBeaconRegion UUID и строковым идентификатором. Если у моего CLBeaconRegion уже есть уникальный идентификатор, в чем смысл форсировать использование дополнительного, неповторимого строкового идентификатора? Это чисто «косметический»?iBeacon - Разница между proximityUUID и region.identifier

Поскольку пользователи не смогут сканировать и подключаться к областям маяка, как это происходит с WiFi (и SSID), например, и поскольку для приложения-получателя требуется предварительно закодированное и предварительно заданное CLBeaconRegion для ввода и диапазона для маяков в регионе, каково реальное использование идентификатора?

Я видел примеры, когда люди используют его для размещения таких вещей, как com.companyname.app, который, как я думал, имеет больше смысла, если идентификатор был использован для соответствия сертификату подписи приложения (но, похоже, нет !). Другие используют его для размещения таких имен, как «Beacon Example», «Apple», «Kitchen».

Другими словами, я не понимаю, почему ресивер также должен указать region.identifier, поскольку он не знает, к какому имени передатчика он подключится. Независимо от того, как я называю вещатель, приемник всегда будет определять идентификатор на своей стороне.

ответ

15

Идентификатор строки CLBeaconRegion не имеет ничего общего с идентификаторами в передачах iBeacon. Это просто ключ поиска, используемый CoreLocationManager для отслеживания нескольких регионов.

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

Основная цель идентификатора приходит, если вы хотите изменить или остановить диапазон/мониторинг вашего региона. Используя тот же идентификатор, CoreLocation точно знает, к какой области вы обращаетесь.

В приведенном ниже примере мы строим region1, затем начинаем контролировать его. Затем мы меняем второстепенный идентификатор, который мы отслеживаем в region2, и начинаем отслеживать его. Поскольку тот же самый строковый идентификатор используется в region1 и region2, CoreLocation знает, что заменит первый контролируемый регион вторым.

CLBeaconRegion *region1 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] major: 1 minor: 1 identifier: @"my.made.up.unique.identifer]; 
[_locationManager startMonitoringForRegion:region1]; 
CLBeaconRegion *region2 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"] major: 1 minor: 2 identifier: @"my.made.up.unique.identifer]; 
[_locationManager startMonitoringForRegion:region2]; 

Это чаще всего используется для остановки мониторинга для региона. Как это:

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

+0

Спасибо, Дэвид. Прекрасно ответил и понял сейчас. –

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