Сценарий универмага iBeacon - ранжирование и мониторинг

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

У нас есть 500 магазинов, в которых мы хотим разместить iBeacons. Цель маяка состоит в том, чтобы приветствовать клиента уведомлением и купоном (иногда). Мы хотели бы использовать один UUID, основным из которых является номер магазина, а второстепенным - тип магазина (обычный магазин против детей. Детский магазин может быть подключен к обычному магазину). В идеале, после того как iBeacon с нашим UUID будет найден, мы бы хотели, чтобы наше приложение извлекало файл XML с нашего веб-сайта, относящийся к основному номеру (номеру магазина), отображало приветственное сообщение с уведомлением (возможно, с указанием "у нас есть купон для вас"). в зависимости от того, что говорит файл xml), и сохраните данные файла xml в приложении, чтобы пользователь мог получить купон, если он откроет приложение. Все это кажется возможным с приложением на переднем плане, но нам, похоже, трудно заставить его работать в фоновом режиме. Возможно ли то, что я описываю, и должен ли я думать о другом способе сделать это?

Спасибо

1 ответ

Да, ты можешь это сделать. Хитрость заключается в том, что вам нужно совмещать как дальномер, так и мониторинг одновременно. Мониторинг необходим для запуска вашего приложения в фоновом режиме. Ранжирование необходимо, чтобы получить конкретные идентификаторы Маяков, которые вы видите.

Установите это так:

CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"blah"];
region.notifyOnEntry = YES;
[self.locationManager startMonitoringForRegion:region]; 
[self.locationManager startRangingBeaconsInRegion:region]; 

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

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    if (!_firstOneSeen) { 
      _firstOneSeen = true;
      // Do something with beacons array here.  read out the major/minor and get the 
      // notification message from your XML web service                   
   }
}

Две ноты предостережения:

  1. Мониторинг регионов iBeacon в фоновом режиме может быть немного сложнее, и это может занять больше времени, чем вы думаете, чтобы получить обратные вызовы. Смотрите это подробное обсуждение.

  2. У вас есть всего пять секунд с момента пробуждения вашего приложения до его повторного перехода в спящий режим, поэтому ваш веб-сайт лучше реагирует очень быстро. Более безопасная идея, которая будет работать при удалении из сети, состоит в том, чтобы извлечь XML-файл и кэшировать его внутри вашего приложения, чтобы он был готов к работе, даже если есть отключение из сети.

Моя компания, Radius Networks, создает библиотеку и веб-сервис под названием ProximityKit, который осуществляет предварительное кэширование пар ключей / значений, специфичных для маяка, которые можно настроить с помощью веб-браузера. Таким образом, вам не нужно писать веб-сервис самостоятельно.

Другие вопросы по тегам