このような何か:
func startMonitoring(_ manager:CLLocationManager, region:CLCircularRegion) {
if !CLLocationManager.isMonitoringAvailable(for: CLCircularRegion.self) {
print("Cannot monitor location")
return
}
if CLLocationManager.authorizationStatus() != .authorizedAlways {
print("Please grant access")
} else {
let locationManager = CLLocationManager()
locationManager.startMonitoring(for: region)
}
}
func getRegionForLocation(_ location:CLLocation) -> CLCircularRegion {
let radiusMeters:Double = 1000
let identifier = "MyGeofence \(location)"
let region = CLCircularRegion(center: location.coordinate, radius: radiusMeters, identifier: identifier)
region.notifyOnEntry = true
region.notifyOnExit = !region.notifyOnEntry
return region
}
func getLocationsFromFireBase() -> [CLLocation] {
var locations:[CLLocation] = []
// .. populate with locations from DB
return locations
}
//where you want to enable
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
let locations = getLocationsFromFireBase()
for location in locations {
let region = getRegionForLocation(location)
startMonitoring(locationManager, region: region)
}
私は(あなたがたとえば、あなたのInfo.plistにNSLocationAlwaysUsageDescriptionを追加する必要があります)場所へのアクセスを有効にする方法の上に光沢のですが、複数のジオフェンスを追加する一般的な原則が示されています。また、CLLocationManagerにデリゲートを追加して、デバイスがジオフェンスに出入りする際に通知する必要があります。
データベースには何がありますか?緯度/経度ですか?ジオフェンスを作成するには、一般的に点と半径が必要です。 –
データベースには、緯度+経度と半径の識別子、およびその領域の識別子があります。以下の例をありがとう、私はそれを撃つだろう。 –