2016-09-27 6 views
0

Ich habe eine App, wo ich nach Beacons scannen (ich kenne die UIIDs) und zeige sie an. Die ersten Male, als ich es lief, fand ich die Beacons fast sofort. Aber jetzt, jedes Mal, wenn ich es leite, scheint es immer länger zu dauern, sie zu erkennen. Obwohl ich die Beacons direkt neben dem Gerät auf dem Schreibtisch habe.iOS: Beacons Erkennung dauert lange

Ich habe versucht, die Batterien zu ersetzen, von einem iPhone zu einem iPad zu wechseln, eine Beacon Scanning App auf dem Mac zu überprüfen, die App neu aufzubauen, etc. Ich habe auch eine Reihe von verschiedenen Beacons von verschiedenen Herstellern und sie scheinen alle das gleiche Problem haben. Nichts scheint das zu beheben.

Mein Code sieht im Grunde wie folgt:

let locationManager = CLLocationManager() 
locationManager.delegate = self 
let region = CLBeaconRegion(proximityUUID: UUID(uuidString:"61687109-905F-4436-91F8-E602F514C96D")!, identifier: "BlueCat beacon") 
locationManager.startMonitoring(for: region) 

Und dann kann ich für alles bis zu 5 oder mehr Minuten, bevor eine der Delegatmethoden Anruf warten zu bekommen.

Dies ist das erste Mal, dass ich versucht habe, Beacons zu verwenden. Ist das normal? Kann es lange dauern, bis ein Beacon von einem Gerät erkannt wird?

Antwort

1

Unter idealen Bedingungen, didEnterRegion Rückrufe auf iOS kommen innerhalb weniger Sekunden von einem Beacon in Reichweite. Unter weniger idealen Bedingungen können diese Rückrufe 15 Minuten oder länger dauern.

Es gibt viele Dinge, die Verzögerungen bei der Erkennung von Beacons beim Monitoring verursachen können, und es ist schwer zu sagen, ohne genau zu wissen, wie Sie testen. Zwei Tipps:

  1. Hardware Filterschlitze auf iOS-Geräten sind begrenzt und sind auf einem first-come, first-served Prinzip. Wenn Sie eine Reihe von Beacon-Apps installiert haben, die diese Slots belegt haben (oder wenn Ihre App eine Reihe von Regionen registriert hat), wurden möglicherweise alle diese Slots belegt. Sobald die Hardwarefiltersteckplätze nicht mehr vorhanden sind, werden die Erkennungen auf Softwarescans zurückgesetzt, die etwa alle 15 Minuten ausgeführt werden. Deinstallieren Sie alle Apps (einschließlich Ihrer), die an diesen Slots hängen bleiben, und installieren Sie dann nur Ihre App neu.

  2. Stellen Sie sicher, dass Sie nicht "in der Region" sind, wenn Sie die App in den Hintergrund stellen. Wenn iOS glaubt, dass es sich in der Region befindet, erhalten Sie keinen neuen Rückruf didEnterRegion, bis festgestellt wird, dass es die Region verlassen hat und dann erneut eingegeben wurde. Die Zeit, die iOS benötigt, um die Region zu verlassen, ist viel länger als die Zeit, die für die Realisierung benötigt wird. Um sicherzustellen, dass es die Region verlässt, sollten Sie immer nach Beacons suchen, wenn die App im Vordergrund ist. Lassen Sie die App etwa eine Minute lang im Vordergrund, damit iOS erkennt, dass es sich nicht mehr in der Region befindet (normalerweise 30) Sekunden, um einen Ausgang auszulösen.) Nur dann sollten Sie es in den Hintergrund stellen und eine Bake einschalten, um die Erkennungszeiten zu messen.