iBeacon: Руководство к действию



    iBeacon является новой технологией, которая построена на основе Bluetooth Low Energy или BLE. Пока iBeacon более всего ассоциируется с Apple. Начиная с 2013 года iBeacon встроена в Apple iOS 7. Впервые пилотный проект был запущен в магазинах Apple в декабре 2013 года и в 2014 году ожидается существенное расширение использования технологии — via Wi-Life

    Добрый день, дорогой Хабрахабр!

    Сегодня мы познакомимся с реализацией функционала BLE под iOS на основе iBeacon-девайсов от Roximity. Поискал, поспрашивал, пошерстил, вроде как, никто так и не писал о практической стороне вопроса в рунете. Статью делю на две части: про настройку на серверах Roximity и про подкапотную приложений.

    Заинтересовавшихся прошу под кат.

    Магия на стороне Roximity


    После покупки беконов вам выдают «Merchant Login». Я приобрел три бекона; вот так выглядит первая страничка админки беконов:



    Перед тем, как идти дальше, стоит отметить, что:

    • Каждому бекону можно назначить неограниченное количество тегов
    • Нескольким беконам можно назначить одинаковые теги
    • Можно создать сообщения, которые будут выскакивать по определенному действию (вход в зону покрытия, выход из нее, непосредственная близость)
    • Сообщения можно назначить определенным тегам
    • Если сообщение назначено тегу, который принадлежит нескольким беконам, то эти беконы работают как один большой бекон

    Форма создания сообщения выглядит следующим образом:



    Рядом расположена памятка о примерных радиусах срабатывания брелоков. Каждому сообщению можно назначить:

    • Имя сообщения, которое не светится нигде, кроме этой админки
    • Действие, по которому сообщение срабатывает
    • Само сообщение, которое увидит пользователь
    • Частоту появления
    • Теги беконов, относящихся к сообщению
    • Дату окончания работы сообщения

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



    Магия на нашей стороне


    Интересно, что беконы работают не только, когда приложение активно, но и в фоновом, и даже закрытом состоянии! То есть, если у вас установлено приложение с Roximity SDK, то каждый раз при появлении ваших беконов в видимости телефона, на 30 секунд будет открываться ваше приложение с вызовом соответствующих методов из оперы Background Fetch.

    После правильной установки Roximity SDK, сервера Roximity абсолютно все сделают за вас. Единственное, что нам нужно будет сделать (если вообще нужно будет), это подписаться на ROX_NOTIF_MESSAGE_FIRED:

    [[NSNotificationCenter defaultCenter] addObserver:sharedManager
                                                    selector:@selector(handleNotification:)
                                                        name:ROX_NOTIF_MESSAGE_FIRED
                                                      object:nil];
    

    Примерный метод handleNotification: может выглядеть так:

    - (void)handleNotification:(NSNotification *)rawNotification
    {
       NSDictionary *notification = rawNotification.userInfo;
    
       NSString *beaconId = notification[@"com.roximity.notif"][@"com.roximity.notification.trigger"][@"beaconId"];
       NSString *event = notification[@"com.roximity.notif"][@"com.roximity.notification.trigger"][@"event"];
       NSString *name = notification[@"com.roximity.notif"][@"com.roximity.notification.trigger"][@"name"];
    
       NSLog(@"Beacon event: %@ - %@ - %@", event, beaconId, name);
    }
    

    Извиняюсь за магические строки, к сожалению, я потерял памятку о соответствующих дефинициях. Напоминаю, что handleNotification: будет вызываться даже если ваше приложение было полностью закрыто!

    Заключение


    Вот и все! Пользуйтесь беконами на здоровье и никогда не бойтесь окунаться в новые технологии.

    Если вы нашли какие-либо неточности или опечатки в статье, обязательно напишите в мой хабрацентр.

    Готов ответить на все ваши вопросы!
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 15

      +8
      Извините, что не в личку, но во избежание повторений в будущем: beacon — маяк, а не бекон.
        +2
        Спасибо! Мне просто нравится называть их беконами :)
          +1
          Ну все ж таки, если и переходить на великий и могучий, то «бакены» по-корректнее будет )
          +6
          Так же веселее :)
          0
          Хотел бы уточнить, что Вы имели в виду на счет?
          и даже закрытом состоянии!

          Приложение может находится в 5 состояниях: Not running, Inactive, Active, Background and Suspended.
          Если под закрытым имелось в виду «Not running», то в этом состоянии iBeacon не работают.
          As we talked about in the What's New with Multitasking session at WWDC in June, this is changing for iOS 7. When a user kills an app in iOS 7, the OS will not relaunch it for any reason. Dead means dead. So what you are seeing is expected on iOS 7. The only way your app will resume getting location manager delegate callbacks is if the user relaunches the app explicitly.
            0
            По факту, они работают. Приложение в полностью закрытом состоянии, bluetooth включен. Как только наш бекон появляется в радиусе доступности, вызывается блок по нотификации ROX_NOTIF_MESSAGE_FIRED.
              0
              Когда я проверял на родном iBeacon API, то не работало.
                0
                Возможно, это перки Roximity, но у нас все отлично работает.
            +1
            мониторинг маячков в состоянии Not Running появился в 7.1 и, насколько знаю, официально еще не документирован. beekn.net/2014/03/apple-ios-7-1-launches-major-ibeacon-improvement/
              0
              Прошу прощения за нубский вопрос. А для работы маячков на айфоне должен быть включен блютуз, или айос в фоне периодически запускает сессии сканирования?
                0
                Bluetooth должен быть включен для обнаружения маячков
                +1
                Спасибо за статью!
                Правильно ли я понимаю, что roximity не предоставляет инструмента для геолокации по маячкам, только уведомления?
                  +1
                  в API в отношении маячков не существует понятия «геолокация». Их можно лишь обнаружить — определить есть ли поблизости. Хотя геолокацию по маячками можно написать, зная точную позицию каждого, и расставив из довольно плотно, чтобы хотя бы 3 из них были видны одновременно.
                    +1
                    Спасибо, это я понимаю, мы как раз уже имели опыт написания своей геолокации по маячкам, именно по изложенному вами принципу. Мне было интересно, не предоставляет ли roximity такого из коробки.
                  +4
                  Сидишь тут голодный в офисе. Жестокий хабр…

                  Only users with full accounts can post comments. Log in, please.