- PVSM.RU - https://www.pvsm.ru -
В iOS7 появилась поддержка iBeacon. Интернет пестрит заголовками:
— Почему iBeacon может быть самой важной функцией iOS7. [1]
— iBeacon откроет новую эру локационных приложений. [2]
— Как iBeacon может убить NFC. [3]
— iBeacon и будущее мобильных платежей. [4]
По словам журналистов это супер технологиях, которая изменит рынок мобильных платежей, indoor навигации, привычки покупателей и заодно убьет NFC.
Под катом я расскажу что такое iBeacon на самом деле, как его можно использовать и покажу пример приложения для навигации по нашему [5] офису.
iBeacon это маячок транслирующий по Bluetooth Low Energy [6] три параметра proximity UUID, major и minor. iOS7 упрощает работу с такими устройствами.
proximity UUID это уникальный 128 битный идентификатор, все маячки вашей компании или в пределах здания имеют одинаковый pUUID. major и minor это 16 битные беззнаковые целые для нумерации маячков в пределах одного pUUID. Это рекомендации Apple, вы можете задать абсолютно любые значения для этих параметров, но рекомендованная схема удобнее.
Доступен предзаказ на маячки от Estimote [7] и Kontakt [8].
[8] [7]
Один маячок стоит $30, работает два года от батарейки. Многие компании дорабатывают [9] свои продукты для поддержки профиля iBeacon. Думаю, в течение трех месяцев появятся китайские аналоги по $10.
iOS устройства могут выступать в роли маячка, это позволяет поиграть с новым API уже сейчас.
В Core Location Framework [10] добавили три класса: CLBeacon, CLBeaconRegion и CLCircularRegion. В CLLocationManager появились методы isRangingAvailable, rangedRegions, requestStateForRegion, startMonitoringForRegion, startRangingBeaconsInRegion и соответствующие события в CLLocationManagerDelegate. startMonitoringForRegion теперь поддерживает не только GPS-регионы но и Bluetooth. О том как это использовать подробно написано в документации [11].
Фактически новое API предоставляет две возможности:
Использовать данные для получения координат устройства в помещении нельзя. В пояснении к погрешности расстояния (accuracy) прямо написано «Do not use it to identify a precise location for the beacon». Эксперименты подтверждают, данные не пригодны для триангуляции.
Возможные применения iBeacons:
iPhone 4s+, iPad 3+ могут работать как маячок. Я решил написал простую навигацию по нашему офису, используя тестовые iOS устройства. Если у вас нет Xamarin.iOS или желания собирать приложение, попробуйте Estimote App [14]. Приложение демонстрирует новые функции (потребуется два iOS устройства с Bluetooth LE).
Итак. Карта нашего офиса:
Для навигации нужны маячки с iOS7, я набрал тестовых устройств и разложил их в центре кабинетов 310, 311 и 312. Всего потребовалось 3 маячка и один приемник.
За основу возьмем демо-приложение Xamarin AirLocate [15]. Оно умеет включать трансляцию proximity UUID, major и minor (параметры настраиваются) и отображать список доступных вокруг маячков с заданными pUUID.
Код приложения с навигацией по нашему офису доступен на github [16]. Сразу хочу извиниться за ужасный код, я маркетолог и это мое первое iOS приложение.
Задаем маячкам одинаковый proximity UUID, major ставим равным номеру кабинета. Код включения маячка (в фоне не работает, нужно выключить автоблокировку):
CLBeaconRegion region = new CLBeaconRegion (uuid, major.UInt16Value, minor.UInt16Value, Defaults.Identifier);
if (region != null)
peripheralManager.StartAdvertising (region.GetPeripheralData (power));
AirLocate выдает список доступных маячков с расстоянием и точностью, пример из 312 кабинета (маячок из 310 не добивает).
Создадим MapViewController [17] который будет рисовать прямоугольник над кабинетом, номер которого содержится в major ближайшего маячка.
locationManager = new CLLocationManager ();
locationManager.DidRangeBeacons += HandleDidRangeBeacons;
locationManager.StartRangingBeacons (new CLBeaconRegion(Defaults.SupportedProximityUuids[0], "office_beacon"));
void HandleDidRangeBeacons (object sender, CLRegionBeaconsRangedEventArgs e)
{
drawRegion (e.Beacons [0]);
}
switch ((int)(beacon.Major)) {
case 310:
path.AddRect(roomCoords[0]);
break;
case 311:
path.AddRect(roomCoords[1]);
break;
case 312:
path.AddRect(roomCoords[2]);
break;
}
(еще раз простите за ужасный код).
Теперь можно походить по офису и потестировать.
Работает!
Точность определения кабинета прекрасная, а вот скорость обновления не очень, если дойти обычным шагом в другой кабинет карта обновится секунд через 10-30.
Приложение стоит улучшить. Добавить порог accuracy, чтобы в соседних кабинетах и коридоре без маяков, карта не рисовала кабинеты с маячками. И рисовать не прямоугольники, а круги с accuracy радиусом. Но для демонстрационных целей достаточно.
В целом ничего революционного iBeacon из себя не представляет, но Apple определенно дала сильный толчок развитию локационных приложений. Для iOS7 они пишутся десятком строчек кода.
Подписывайтесь на наш хабра-блог [18]. Каждый четверг полезные статьи о мобильной разработке, маркетинге и бизнесе мобильной студии.
Автор: junk
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/iphone-2/44351
Ссылки в тексте:
[1] .: http://www.forbes.com/sites/anthonykosner/2013/08/29/why-micro-location-ibeacons-may-be-apples-biggest-new-feature-for-ios-7/
[2] .: http://www.iphonehacks.com/2013/08/ios-7-ibeacons-location-apps.html
[3] .: http://www.businessinsider.com/how-apples-new-ibeacon-may-be-the-end-of-nfc-2013-9
[4] .: http://www.macworld.co.uk/apple-business/news/?newsid=3469042
[5] нашему: http://touchin.ru
[6] Bluetooth Low Energy: http://en.wikipedia.org/wiki/Bluetooth_low_energy#Applications
[7] Estimote: http://estimote.com/
[8] Kontakt: http://kontakt.io/
[9] дорабатывают: http://redbearlab.com/ibeacon/
[10] Core Location Framework: https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CoreLocation_Framework/_index.html
[11] в документации: https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/LocationAwarenessPG/RegionMonitoring/RegionMonitoring.html#//apple_ref/doc/uid/TP40009497-CH9-SW7
[12] найди обезьяну: http://blog.xamarin.com/play-find-the-monkey-with-ios-7-ibeacons/
[13] настроить прикосновением iPhone: http://support.apple.com/kb/HT5900?viewlocale=en_US&locale=en_US
[14] Estimote App: https://itunes.apple.com/us/app/estimote-virtual-beacon/id686915066?mt=8
[15] AirLocate: http://docs.xamarin.com/samples/AirLocate
[16] на github: https://github.com/alarin/monotouch-samples/tree/master/AirLocate
[17] MapViewController: https://github.com/alarin/monotouch-samples/blob/master/AirLocate/AirLocate/MapViewController.cs
[18] хабра-блог: http://habrahabr.ru/company/touchinstinct/blog/
[19] Источник: http://habrahabr.ru/post/195104/
Нажмите здесь для печати.