2016-03-23 10 views
2

Ich fürchte, ich kenne die Antwort darauf.Bedeutet das Limit des Standortmanagers von 20 Regionen insgesamt 20 Geofence UND Beacon-Regionen?

Apples Location Manager-Dokumente für die startMonitoringForRegion-Methode sagen, dass Sie maximal 20 Regionen gleichzeitig überwachen können.

Ich habe eine Client-App, die sowohl Geofence-Regionen als auch Beacon-Regionen stark nutzt.

Ich hatte angenommen, dass es separate 20 Regionengrenzen für Geofence-Regionen und Beacon-Regionen gibt, aber ich befürchte, dass die Grenze für beide Arten insgesamt 20 Regionen beträgt.

Kann jemand meine Ängste basierend auf der tatsächlichen Erfahrung bestätigen?

Antwort

3

Ja, das 20-Regionen-Limit ist das Maximum, das Sie mit CoreLocation sowohl für CLBeaconRegion s als auch für CLCircularRegion s (Geofences) überwachen können. Wenn iOS 7 Beacon-Unterstützung hinzugefügt hat, erbten Beacon-Regionen die gleiche Einschränkung für Geofences, da die APIs definiert wurden. Und wie Sie vermutet haben, gilt das Limit für jede Art von Region, die Sie überwachen möchten. So können Sie 10 CLBeaconRegion s und 10 CLCircularRegion s überwachen, aber nicht mehr als 20 kombiniert von jedem Typ.

+0

Seufzer. Ich hatte Angst davor. Weißt du, warum Apple das 20-Länder-Limit auferlegt? –

+0

Ich weiß nicht, warum Apple genau 20 als Grenze wählte, aber eine Grenze scheint vernünftig. Je mehr Geofences eine App hat, desto mehr Arbeit muss das Betriebssystem bei jeder Standortänderung leisten, um zu sehen, ob es zu einem Absturz kommt. Der Unterschied zwischen 20 und 40 mag klein sein, aber stell dir eine App vor, die 1000 hat! Für Beacons gibt es eine begrenzte Anzahl von Steckplätzen, die auf dem Bluetooth-Chip zur Hardware-Filterung für schnelle Beacon-Erkennung verfügbar sind. Es gibt Hinweise darauf, dass auf einigen iOS-Geräten ein systemweites Limit von 30 Slots besteht, was bedeutet, dass zwei Apps mehr als alle diese Slots mit jeweils 20 Beacon-Regionen verbrauchen. – davidgyoung

+0

@davidgyoung Dieses Hardware-Limit von 30 gilt nur für detektierbare Beacons zur gleichen Zeit. Stellen Sie sich vor, Sie sind in einem Geschäft und haben 30 Leuchttürme in Ihrer Nähe - das ist ungefähr diese Grenze. Dies ist das harte (Ware) Limit. Und es gibt tatsächlich keine Grenze für Software (Ware). Denken Sie darüber nach - _every_ Beacon wird zuerst erkannt und dann wird die gefundene ID mit den registrierten Beacons auf dem Gerät verglichen. Auf der Geräteseite gibt es also nur die indizierte Liste der registrierten Beacon IDs, die durchsucht werden müssen. Gleiches gilt für Geofences. – Darko

1

Die Grenze ist 20 für jeden Typ von CLRegion. Dies bedeutet, dass Sie 20 CLCircularRegion und 20 CLBeaconRegion überwachen können.

Dies ist nicht dokumentiert, aber ich habe einige Tests und fügte mehr als 20 CLBeaconRegion und mehr als 20 CLCircularRegion. Die Ergebnisse waren self.locationManager.monitoredRegions.count war 40 mit 20 monitoredRegions vom Typ CLCircularRegion und die anderen 20 vom Typ CLBeaconRegion.

Sobald Sie die Grenze für jede Art von CLRegion erreichen und Sie versuchen, neue Regionen zu überwachen (dieser Art) bekommen sie ignoriert und locationManager:monitoringDidFailForRegion:withError: mit dem kCLErrorRegionMonitoringFailure Fehlercode genannt.

+0

Ihre Antwort stimmt nicht mit meinen Erfahrungen überein.Nachdem ich diese Frage gepostet habe, habe ich es ausprobiert und festgestellt, was David Young berichtet hat - dass Ihre App nur maximal 20 Regionen überwachen kann, nicht 20 von jeder Art. Wenn Sie versuchen, mehr als 20 hinzuzufügen, werden einige ignoriert. –

+0

@DuncanC Ich habe dies auf iOS 9 getestet und das war das Ergebnis. Stellen Sie sicher, dass Sie auf einem Gerät testen, da der Simulator die Überwachung von 'CLBeaconRegion' nicht unterstützt. – Maikol

+0

Sie erhalten keine Fehlermeldung, wenn Sie versuchen, mehr als 20 kombinierte Regionen zu überwachen, die Regionen über 20 werden jedoch ignoriert. Im Gegensatz dazu erhalten Sie einen Fehler, wenn Sie versuchen, mehr als 20 Regionen eines einzigen Typs hinzuzufügen. –