Статьи

Использование и создание маяков в iOS 7

Этот пост был изначально написан Стивеном Захаруком.

Одна из многих интересных функций, представленных в iOS 7, — это концепция Beacons . Идея, стоящая за ними, заключается в том, что вы можете использовать устройство iOS или даже отдельное устройство для передачи маяка. А затем в приложении iOS 7 вы можете прослушать этот маяк и определить, находитесь ли вы в пределах досягаемости. Если это так, то вы можете отобразить контекстную информацию для вашего конечного пользователя. 

Например, MLB предположительно собирается использовать эту технологию на своих стадионах, чтобы указывать маршруты к вашим местам или даже предоставлять купоны / предложения. 

Довольно круто, правда? Если я заинтересовался, прочитайте, и я объясню, как именно добавить это в ваше собственное приложение. Вы можете быть удивлены тем, как мало кода необходимо!

Итак, первое, что вам нужно сделать, это добавить следующие рамки в ваш проект:

  • CoreLocation.framework
  • CoreBluetooth.framework
Каркас Bluetooth на самом деле необходим только в том случае, если вы планируете использовать свое приложение для размещения маяка.

Шаг 1:

Во-первых, нам нужно сгенерировать UUID (универсальный уникальный идентификатор) . Этот идентификатор будет использоваться как маяком, так и вашим приложением, чтобы они могли идентифицировать друг друга и установить соединение. 

Есть два способа сделать это. 

  1. Используйте инструмент командной строки uuidgen, который поставляется с Xcode. 
  2. Просто напишите некоторый код для его генерации. В частности, просто используйте следующий метод. А затем сохраните, если выкл для использования в вашем приложении. [NSUUID UUID]

Шаг 2:

Теперь, когда у вас есть UUID, вы можете создать экземпляр своего региона:

NSUUID* uuid = [[NSUUID alloc]initWithUUIDString:@"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"]; 

_region = [[CLBeaconRegion alloc]initWithProximityUUID:uuid identifier:@"myApp"];

Первая строка создает экземпляр вашего UUID. (Примечание: вам нужно заменить приведенную выше строку фактическим UUID, в противном случае возвращаемое значение uuid будет равно нулю)

Следующая строка создает ваш регион. Вы должны передать действительный UUID и идентификатор. Идентификатор может быть любой строкой, но вы должны сделать ее полезной. Особенно если ваше приложение будет обрабатывать несколько регионов. Например, представьте, что вы пишете приложение для торгового центра. Вы можете иметь регион для каждого магазина в торговом центре. Так что в этом случае ваш идентификатор будет уникальной строкой, которая идентифицирует конкретное хранилище. 

Шаг 3:

Для этого шага давайте представим, что мы уже настроили маяк, будь то другое устройство iOS или независимый передатчик Bluetooth. И наше приложение хочет слушать этот маяк. Предполагая, что радиобуй вещает с использованием того же UUUID, нам просто нужно использовать следующий код:

_lm = [[CLLocationManager alloc]init];

_lm.delegate = self;

[_lm startRangingBeaconsInRegion:_region];

Сначала мы создаем  диспетчер расположений , назначаем его делегата и, наконец, вызываем «startRangingBeaconsInRegion:». Эта последняя часть сообщает приложению, что оно должно начать прослушивание нашего конкретного региона, который мы создали на шаге 2.

Назначенный нами делегат имеет тип CLLocationManagerDelegate , и нам просто нужно прослушать один конкретный метод:

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region

{

}

Как только мы вошли в радиус действия маяка, этот метод будет срабатывать постоянно, предоставляя нам все маяки в пределах нашего диапазона . Затем вы можете просмотреть каждый маяк, который был возвращен, и определить:

  • Точность в метрах
  • Его сила сигнала
  • И, наконец, его близость (далеко, близко, сразу)

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

Этот следующий шаг не является обязательным. Я покажу вам, как превратить ваше приложение в маяк iOS 7. (Примечание: именно поэтому нам нужно было добавить CoreBluetooth.framework)

Для этого нам сначала нужно создать Peripheral Manager :

_pm = [[CBPeripheralManager alloc]initWithDelegate:self queue:nil];

Менеджер принимает два параметра. Первый — это делегат типа CBPeripheralManagerDelegate, а следующий — поток, в котором он должен работать (мы передаем nil, чтобы он работал в основном потоке).

Для делегата нам нужно реализовать только один метод. Этот метод позволяет нам узнать, когда менеджер «включен».

-(void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral

{

    if(peripheral.state ==  CBPeripheralManagerStatePoweredOn)

    {

        NSDictionary* values = [_region peripheralDataWithMeasuredPower:nil];

        [peripheral startAdvertising:values];

    }

}

Как только мы узнаем, что мы находимся, мы можем использовать наш регион, тот же регион, который мы создали на шаге 2, чтобы начать рекламировать наш маяк. 

И вот так, вы создали рабочий маяк!

Наслаждайтесь!