Мое приложение работает нормально для мониторинга маяков при работе на переднем плане и в фоновом режиме, даже когда я закрываю приложение, оно запускает приложение в фоновом режиме ... Но когда я перезагружаю телефон, оно не просыпается ..
//Я использую фоновые режимы для определения местоположения также
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)
}
}