Сценарий универмага 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
}
}
Две ноты предостережения:
Мониторинг регионов iBeacon в фоновом режиме может быть немного сложнее, и это может занять больше времени, чем вы думаете, чтобы получить обратные вызовы. Смотрите это подробное обсуждение.
У вас есть всего пять секунд с момента пробуждения вашего приложения до его повторного перехода в спящий режим, поэтому ваш веб-сайт лучше реагирует очень быстро. Более безопасная идея, которая будет работать при удалении из сети, состоит в том, чтобы извлечь XML-файл и кэшировать его внутри вашего приложения, чтобы он был готов к работе, даже если есть отключение из сети.
Моя компания, Radius Networks, создает библиотеку и веб-сервис под названием ProximityKit, который осуществляет предварительное кэширование пар ключей / значений, специфичных для маяка, которые можно настроить с помощью веб-браузера. Таким образом, вам не нужно писать веб-сервис самостоятельно.