Статьи

Поддержка iBeacons в вашем мобильном приложении Ionic Framework

Недавно я подобрал несколько  Estimote iBeacon  и решил, что я попытаюсь заставить их работать в приложениях  Ionic Framework для  Android и iOS.

Если вы не знакомы с iBeacons, это небольшие бесконтактные устройства Bluetooth. Существует много разных производителей, но у Estimote, как представляется, лучшая заявленная продолжительность работы от батареи и долговечность. Обычно iBeacons передает сигнал каждые 100-1000 мс в зависимости от конфигурации или марки. Широковещательный сигнал содержит UUID и два числовых идентификатора, которые являются основной и вспомогательной версией.

Прежде чем я войду в код, я поделюсь несколькими возможными вариантами использования для iBeacons:

  1. Вызывает некоторую литературу или аудио, когда ваше устройство обнаруживает, что вы находитесь рядом с конкретным iBeacon в музее. Поместите один возле Статуи Давида в Италии и Бэм, вы можете получить информацию об этом, когда подойдете к нему.
  2. Отслеживание пешеходного трафика в вашем магазине. Может быть, у вас есть большой магазин, такой как Walmart, с iBeacons в каждом отделе. Вы можете увидеть, какой отдел получает больше всего трафика.
  3. Вычисление длительности очереди / очереди для конкретной поездки в парке развлечений на основе устройства для обнаружения маяка.

Есть бесконечные другие полезные сценарии.

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

ionic start IonicBeacon blank
cd IonicBeacon
ionic platform add ios
ionic platform add android

Если вы не используете Mac, не пытайтесь добавлять и собирать для платформы iOS. Только Android будет работать на компьютерах с Linux и Windows.

Плагин, который мы собираемся использовать для iBeacons — это  cordova-plugin-ibeacan  от Питера Метца. На момент написания этого руководства я использовал последнюю версию commit  50315dbc . Если вы хотите быть авантюрным и посмотреть, работает ли более новая версия, это ваше дело.

С  IonicBeacon  в качестве рабочего каталога вашего терминала или командной строки, запустите следующее, чтобы установить плагин:

cordova plugin add https://github.com/petermetz/cordova-plugin-ibeacon.git

Мы почти готовы начать кодирование. Плагин iBeacon от Peter Metz представляет собой простой JavaScript и не очень хорошо работает с Ionic из коробки. Вместо этого мы собираемся использовать оболочку AngularJS, которую я написал для этого плагина. Обертка  нг-Cordova-маяк  можно найти на моей странице GitHub. Загрузите  файл ng-cordova-beacon.min.js  из  каталога dist и поместите его в  каталог вашего проекта  www / js  .

Затем откройте файл вашего проекта  www / index.html  и включите следующий файл JavaScript над  строкой app.js  :

<script src="js/ng-cordova-beacon.min.js"></script>

С включенной оболочкой AngularJS откройте файл вашего проекта  www / js / app.js  и включите следующий код:

angular.module('starter', ['ionic', 'ngCordovaBeacon'])

.run(function($ionicPlatform) {
    $ionicPlatform.ready(function() {
        if(window.cordova && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        if(window.StatusBar) {
            StatusBar.styleDefault();
        }
    });
})

.controller("ExampleController", function($scope, $rootScope, $ionicPlatform, $cordovaBeacon) {

    $scope.beacons = {};

    $ionicPlatform.ready(function() {

        $cordovaBeacon.requestWhenInUseAuthorization();

        $rootScope.$on("$cordovaBeacon:didRangeBeaconsInRegion", function(event, pluginResult) {
            var uniqueBeaconKey;
            for(var i = 0; i < pluginResult.beacons.length; i++) {
                uniqueBeaconKey = pluginResult.beacons[i].uuid + ":" + pluginResult.beacons[i].major + ":" + pluginResult.beacons[i].minor;
                $scope.beacons[uniqueBeaconKey] = pluginResult.beacons[i];
            }
            $scope.$apply();
        });

        $cordovaBeacon.startRangingBeaconsInRegion($cordovaBeacon.createBeaconRegion("estimote", "b9407f30-f5f8-466e-aff9-25556b57fe6d"));

    });
});

Давайте разберемся, что здесь происходит.

angular.module('starter', ['ionic', 'ngCordovaBeacon'])

Для начала нам нужно добавить ng-cordova-beacon в модуль AngularJS. С этим добавленным мы можем перейти к использованию его в нашем контроллере.

Поскольку плагин использует собственный код устройства, нам нужно обернуть любые вызовы в него  $ionicPlatform.ready перед тем, как мы попытаемся его использовать. Только для iOS мы запрашиваем разрешение на использование служб определения местоположения. На Android этот запрос будет проигнорирован, потому что он не нужен.

В  $rootScope.$on звонке мы слушаем ранжирование хитов. В основном мы проверяем, находится ли iBeacon в радиусе действия и как далеко он находится. Если трансляция найдена, добавьте найденный маяк к объекту, который мы можем использовать во внешнем виде.

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

$cordovaBeacon.createBeaconRegion("estimote", "b9407f30-f5f8-466e-aff9-25556b57fe6d")

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

Последнее, о чем стоит беспокоиться, это то, как это приложение будет выглядеть. Возвращаясь к  файлу проекта  www / index.html , добавьте следующий код между  <ion-content> тегами:

<ion-content ng-controller="ExampleController">
    <div class="list">
        <div class="item" ng-repeat="(key, value) in beacons">
            <div class="row">
                <div class="col truncate">
                    {{value.uuid}}
                </div>
            </div>
            <div class="row">
                <div class="col">
                    major: {{value.major}}
                </div>
                <div class="col">
                    minor: {{value.minor}}
                </div>
            </div>
            <div class="row">
                <div class="col">
                    {{value.proximity}}
                </div>
            </div>
        </div>
    </div>
</ion-content>

Я использую класс Ionic, который не включает названный,  truncate который мы должны добавить. Откройте www / css / style.css вашего проекта   и добавьте следующее:

.truncate {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

Мы используем это, чтобы наши очень длинные значения UUID не плавали за пределами экрана. Вместо этого они будут изящно обрезаны, если они слишком длинные.

Ionic iBeacon iOS iBeacon Ionic Android

Выше показано, как приложение должно выглядеть, когда оно обнаружило iBeacons.

Вывод

С iBeacons можно делать много интересных вещей, и их нетрудно использовать с Ionic Framework. Вы можете приобрести набор разработчика от  Estimote , который включает в себя несколько маяков, совместимых как с Android, так и с iOS.

Видео-версию этой статьи можно увидеть ниже.