Ich verwende das air locate Beispiel und die Überwachung für iBeacons nur mit uuid. Wenn ich das Ereignis "Region betreten" erhalte, kann ich nicht das Major und Minor von der Beacon / Region, die das Ereignis ausgelöst hat, bekommen, wenn ich nur nach der UUID suche (ich kann, wenn ich auf einen UUID mit überwache) spezifizierte Dur und Moll) - weiß jemand einen Weg dies zu tun / fehle ich etwas?
Ich möchte nicht wirklich anfangen zu rangieren - scheint nicht, als müsste ich ..
(Der Anwendungsfall ist z. B. viele Geschäfte, die alle Beacons mit derselben Uuid haben, und dann eine Betriebssystembenachrichtigung mit relevanten Informationen über dieses Geschäft ausgeben (erhalten durch Abfragen des Haupt- und Nebenprojekts))
Hier ist im Grunde, was ich tue:
%Vor%Dann im App-Delegierten:
%Vor%Vielen Dank!
Sie machen nichts falsch. So überraschend es auch erscheinen mag, die Überwachungs-API gibt Ihnen nicht die spezifischen Beacons, die den Regionswechsel ausgelöst haben.
Der Grund dafür, dass das Majoritätsobjekt nicht auf dem CLBeaconRegion-Objekt festgelegt ist, liegt darin, dass genau das Objekt verwendet wurde, das Sie zum Starten der Überwachung verwendet haben, und Sie haben dieses Feld auf null gesetzt (oder gar nicht gesetzt). Was Sie suchen, ist eine zusätzliche Reihe von CLBeacon-Objekten. Und wie Sie vorschlagen, ist dies nur auf den Ranging-APIs vorhanden.
Es ist wirklich keine große Sache, mit der Auswahl zu beginnen. Richten Sie es genau zur gleichen Zeit ein, zu der Sie die Überwachung starten:
%Vor%Und wenn Sie nur an dem ersten Ranging-Aufruf interessiert sind, können Sie ein Flag verwenden, um weitere Updates zu ignorieren:
%Vor%Setzen Sie dieses Flag zurück, wenn Sie die Region verlassen
%Vor%Als Bonus können Sie die Antwortzeiten für die Überwachung erheblich beschleunigen, wenn Ihre App im Vordergrund steht. Siehe: Ссылка
Leider ist die Bestimmung der Haupt- und Nebenwerte nur in der iBeacon-Ranging-API und nicht in der iBeacon-Überwachungs-API verfügbar, wenn Sie nur über UUID überwacht werden. Außerdem,
1) iBeacon ranging funktioniert nicht, während Ihre App im Hintergrund ist. Das heißt, wenn Ihre App im Hintergrund läuft (was meistens für diese Art von Apps der Fall ist), können Sie die Haupt- und Nebenwerte eines iBeacon nur bestimmen, wenn Sie auf UUID, Major und Minor überwacht haben.
2) Sie können maximal 20 iBeacons gleichzeitig überwachen. Dies bedeutet, dass Sie, wenn Sie auf UUID-, Major- und Minor-Überwachung zurückgreifen (um die Rangfolge in der Hintergrundausgabe zu umgehen), auf nur 20 iBeacons beschränkt sind (eine große Einschränkung in den meisten praktischen Fällen).
3) Für maximale Skalierbarkeit (da Sie nur 20 iBeacons gleichzeitig überwachen können) wäre es am besten, nur nach UUID zu überwachen, den Benutzer zu benachrichtigen, wenn ein iBeacon dieser UUID erkannt wird, und nach Benachrichtigung kann der Benutzer bestätigen, die App zu holen in den Vordergrund. Sobald die App im Vordergrund ist, kann eine Rangfolge auftreten, um den Haupt- und Nebenbereich des iBeacon zu bestimmen.
All dies führt mich dazu, mich zu fragen, warum Apple das Array von iBeacons, das den Eintritt / Austritt in die Überwachungs-API auslöst, überhaupt nicht aufgenommen hat. Ich überlasse dies Apple für einen Kommentar. Der folgende Beitrag geht sehr detailliert auf diese iBeacon Verhaltensweisen / Einschränkungen ein - iBeacon im Hintergrund - Use Fälle
CLBeaconRegion ist das Filterkriterium, um Beacons zu finden. Was Sie also weitergeben, ist, was Sie zurückbekommen werden, wenn "didEnterRegion" Delegate feuert. Keine Überraschungen dort.
CLBeacon ist der individuelle Beacon, der die Filterkriterien erfüllen muss, um den didEnterRegion-Delegaten auszulösen. Hier finden Sie die wichtigsten, untergeordneten Werte. Um das Beacon zu erhalten, das gefeuert wurde, müssen Sie die ranging API startRangingBeaconsInRegion aufrufen und eine Anzahl von 5 angeben, bevor Sie die Entfernungsmessung stoppen. Tun Sie dies, nachdem Sie den Rückruf didEnterRegion erhalten haben. Dies ist für die Hintergrundüberwachung von Beacons vorgesehen, wenn Sie Ihre App nicht starten möchten. Aber notieren Sie sich, wenn ein Benutzer an einem Beacon vorbeifliegt, um auf dem Server Informationen für eine zielgerichtetere Kampagne zu sammeln.
Manchmal kann es vorkommen, dass ranging keine Beacons findet. Verwenden Sie in diesem Fall die beaconRegion im Callback für startRangingBeaconsInRegion, um zu notieren, dass jemand eine Beacon-Region eingegeben hat.