Мониторинг Bluecats Beacons в фоновом режиме или когда приложение не запущено - PullRequest
0 голосов
/ 28 июня 2018

Я использую маяки Bluecats для своего приложения. Я хочу определить, входит ли пользователь в область маяка, когда пользовательское приложение не запущено, я хочу показать локальное уведомление о том, что пользователь вошел в область маяка

Вот мой код: Класс делегата приложения

var beaconManager = BCBeaconManager()
var beacon_region: BCBeaconRegion!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    beaconManager.delegate = self

    self.requestAuthorizationForLocalNotifications()

    BlueCatsSDK.startPurring(withAppToken: "7d17d7cb-8a26-4b8b-999f-9b031deab7a5", completion: { (BCStatus) -> Void in
        let appTokenVerificationStatus: BCAppTokenVerificationStatus = BlueCatsSDK.appTokenVerificationStatus()
        if (appTokenVerificationStatus == .notProvided || appTokenVerificationStatus == .invalid){
        }
        if (!BlueCatsSDK.isLocationAuthorized()){

            BlueCatsSDK.requestAlwaysLocationAuthorization()
        }
        if (!BlueCatsSDK.isNetworkReachable()){
        }
        if (!BlueCatsSDK.isBluetoothEnabled()){
            let alert = UIAlertController(title: "Turn On Bluetooth", message: "This App requires that Bluetooth is enabled to process your orders", preferredStyle: UIAlertController.Style.alert)
            alert.addAction(UIAlertAction(title: "Don’t Allow", style: UIAlertAction.Style.cancel, handler: nil))
            alert.addAction(UIAlertAction(title: "Allow", style: UIAlertAction.Style.default, handler: nil))
            self.window?.rootViewController?.present(alert, animated: true, completion: nil)
        }

    })

    self.beaconManager.startMonitoringBeaconRegion(beacon_region)

    return true
}

// On Exit
func beaconManager(_ beaconManager: BCBeaconManager!, didExitSite site: BCSite!) {
    PresentNotifications(title: "You exited the region")
}

// On Enter
func beaconManager(_ beaconManager: BCBeaconManager!, didEnter site: BCSite!) {
   PresentNotifications(title: "You Entered the region")
}


func beaconManager(_ beaconManager: BCBeaconManager!, didDetermineState state: BCSiteState, for site: BCSite!) {
    if state == BCSiteState.inside{
        PresentNotifications(title: "You are inside the region")
    }
    else if state == BCSiteState.outside{
        PresentNotifications(title: "You are outside the region")
    }
    else{
        return
    }
}

func applicationDidEnterBackground(_ application: UIApplication) {
    self.beaconManager.startMonitoringBeaconRegion(beacon_region)
}

1 Ответ

0 голосов
/ 28 июня 2018

Приложения взаимодействуют с маяками двумя способами: 1) Мониторинг: действия, запускаемые при входе / выходе из диапазона регионов. работает независимо от того, запущено ли приложение, приостановлено или убито (если приложение не запускается при наступлении событий входа / выхода, iOS запускает его в фоновом режиме на несколько секунд для обработки события). 2) Ranging: действие запускается в зависимости от близости к маяку. Это будет работать только когда приложение запущено.

Таким образом, чтобы iOS разбудила наше приложение, когда оно не работает, вы можете использовать мониторинг. Но у мониторинга есть некоторые ограничения. Он только распознает события входа / выхода и не предоставляет информации о том, какой именно маяк вызвал событие (только в каком регионе это произошло), и не дает оценок близости. Однако вы можете использовать время, которое iOS предоставляет вашему приложению для обработки события входа / выхода, чтобы запустить диапазон в течение нескольких секунд, и узнать, какие именно маяки находятся в диапазоне, и какова их близость.

...