МОЕ приложение IOS не получает обновлений региона, когда я перезагружаю свое устройство, есть идеи? - PullRequest
0 голосов
/ 21 мая 2018

Мое приложение работает нормально для мониторинга маяков при работе на переднем плане и в фоновом режиме, даже когда я закрываю приложение, оно запускает приложение в фоновом режиме ... Но когда я перезагружаю телефон, оно не просыпается ..

//Я использую фоновые режимы для определения местоположения также

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    //do i have to do anything here

    return true
}

// когда срабатывает приложение, когда срабатывает фоновый метод ниже и там я начинаю мониторинг региона

func applicationDidEnterBackground(_ application: UIApplication) {


    do {
        try DLGatewayInterface.getInstance().enableBackgroundWakeups()
        try DLGatewayInterface.getInstance().startBackgroundScan(start: true)
    } catch let error {
        print(error)
    }


}

// Это срабатывает, когдакогда-либо приложение начинает мониторинг региона здесь я настраиваю делегата

var gatewayBridgeDelegate: DLGatewayBridgeDelegate?
private var locationManager:CLLocationManager
private var Region:CLBeaconRegion
var savedDevices = UserDefaults.standard
var major = ""
var minor = ""

override init() {


    locationManager = CLLocationManager()


    super.init()

    locationManager.delegate = self

    // required as "ALWAYS" for iBeacon
    locationManager.requestAlwaysAuthorization()

}

// это будет срабатывать каждый раз, когда приложение достигает фона

public func startRegionMonitoring()
{

    if let beaconName = UserDefaults.standard.value(forKey: "beaconDeviceRegion") as? String{
        print(beaconName)

        self.decimalToHexForMajorMinor(value: beaconName)

        danlawRegion = CLBeaconRegion(
            proximityUUID: BeaconServiceId,
            major: CLBeaconMajorValue(DLUtils.beaconMajor),
            minor: CLBeaconMinorValue(DLUtils.beaconMinor),
            identifier: "Danlaw")
                // reset the regions...just in case
          stopRegionMonitoring()
        // only add it if you need to
        if(!locationManager.monitoredRegions.contains(Region)) {
            locationManager.startMonitoring(for: Region)
        }
    }

}


public func stopRegionMonitoring(){
    danLogDebug()
    locationManager.stopMonitoring(for: danlawRegion)
    resetRegions() // clear all regions...
}




 extension DLLocationManager: CLLocationManagerDelegate {
public func locationManager(_ manager: CLLocationManager, 
didChangeAuthorization status: CLAuthorizationStatus) {
    if status == .authorizedAlways || status == .authorizedWhenInUse {

    }
}

public func locationManager(_ manager: CLLocationManager, 
didFailWithError error: Error) {
    danLogWarn(error.localizedDescription)
}

public func locationManager(_ manager: CLLocationManager, 
didUpdateLocations locations: [CLLocation]) {

}

public func locationManager(_ manager: CLLocationManager, 
didEnterRegion region: CLRegion) {
    // in this bellow method i am calling scanning again
    onRegionEnter(region: region.identifier)

}

public func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {

    onRegionExit(region: region.identifier)

}

public func locationManager(_ manager: CLLocationManager, monitoringDidFailFor region: CLRegion?, withError error: Error) {

}
public func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) {


    onRegionDetermineState(region: region.identifier, state: state.rawValue)
}
public func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) {

    onRegionMonitorStart(region: region.identifier)
}

}

1 Ответ

0 голосов
/ 29 мая 2018

Необходимо настроить мониторинг маяка и установить делегат CoreLocation в didFinishLaunching.Если вы этого не сделаете, вы не получите автоматическое поведение при запуске.

var locationManager: CLLocationManager?  

func application(_ application: UIApplication,  didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
  locationManager = CLLocationManager()
  locationManager?.delegate = self
  let region = CLBeaconRegion(proximityUUID: Uuid, identifier: "my_region")
  locationManager?.startMonitoring(for: region)
}
...