iOS iBeacon: Wie bekomme ich proximityUUID programmgesteuert?

9

Ich möchte die gesamte Nähe-UUID von Werbe-Paketen programmgesteuert sehen. Einige Artikel sagen, dass es auf iOS unmöglich ist, aber Android ist möglich. Aber ich kann es nicht glauben, weil ich die fantastische App "BLExplr" gefunden habe. Ich muss die Funktion in meine App implementieren. Weiß jemand wie man es macht oder gute Beispiele? Jede Hilfe wird geschätzt.

(UPDATE 2014/1/17)

Ich glaube @davidgyoung Antwort ist richtig. Estimote beacons nowernameUUID ist "B9407F30-F5F8-466E-AFF9-25556B57FE6D", aber die UUID meines Estimote-Beacons in der BLExplr-App ist eine andere ID.

    
zono 16.01.2014, 13:35
quelle

3 Antworten

23

Leider kannst du das nicht auf iOS. Wenn Sie sagen, dass BLExplr und LightBlue das können, verwirren Sie die Bluetooth-Dienst-UUID mit der iBeacon Proximity-UUID. Dies sind zwei sehr unterschiedliche Dinge.

Die Bluetooth-Dienst-UUID ist für iOS sichtbar, hat aber nichts mit den Kennungen eines iBeacons zu tun und ist für die Arbeit mit iBeacons nutzlos. Die Service-UUID wird jedes Mal von iOS generiert, wenn ein Bluetooth-Gerät erkannt wird, und bleibt nur für die Dauer der Zeit, während der sich das Bluetooth-Gerät in Reichweite befindet. Wenn Sie ein Bluetooth-Gerät wegnehmen und es später wieder zurückbringen, wird es eine andere Dienst-UUID haben.

Die IDs eines iBeacons (ProximityUUID, Major, Minor) sind in den Body der Bluetooth-Werbung eingebettet. Das Problem bei iOS-Geräten besteht darin, dass die Apple-CoreBluetooth-APIs den Zugriff auf den rohen Werbebody nicht zulassen. Daher kann keine App von Drittanbietern diese IDs lesen. Apple erlaubt den Zugriff auf diese Kennungen nur mit den speziellen iBeacon CoreLocation APIs, aber diese APIs erfordern, dass Sie die Proximity UUID im Voraus kennen.

Tut mir leid, ich weiß, das ist nicht die Antwort, die du hören willst! (Es tut mir auch leid!) Für was es sich lohnt, können Sie dies auf Android, auf OSX Mavericks und Linux tun.

Siehe Details hier .

>     
davidgyoung 16.01.2014, 14:54
quelle
8

davidgyoung stimmt teilweise nicht damit überein, iBeacon-Informationen zu erhalten. Sie können die Umgebungs-UUID unter OS X, aber nicht unter iOS abrufen.

In einem CBPeripheral s advertisingData sollte ein Schlüssel mit dem Namen kCBAdvDataManufacturerData ; Es ist ein NSData , das die iBeacon Werbeinformation darstellt. Dieser Schlüssel ist nur unter OS X verfügbar .

Überprüfen Sie, ob das 2. Byte gleich 0x02 ist, die ersten beiden Bytes gleich 0x004c ( 76 in Dezimal) und das 4. Byte (dezimal) + 4 gleich der Datenlänge (sollte sein 25).

NSRanges (Entschuldigung für die Mac-Syntax)
Proximity UUID: NSMakeRange(4, 16)
Major: NSMakeRange(20,2)
Minor: NSMakeRange(22,2)

Um sicherzugehen, dass Sie es richtig machen, können Sie die Werte als hexadezimal (verwenden Sie das Format string %x ) und sicherstellen, dass sie mit description von NSData übereinstimmen, woher sie stammen.

    
Nate Symer 23.06.2014 19:59
quelle
0
%Vor%

aber die UUID ist die DeviceUUID, nicht die ProximityUUID

    
Jeanette Müller 26.01.2015 14:52
quelle

Tags und Links