I've been doing quite a bit of research on iBeacons and CoreBluetooth on iOS devices. Your posts and research have been great. I've learned quite a bit. Unfortunately, i'm running into a dead end as it pertains to what I actually want to do.
I was reading this post: http://developer.radiusnetworks.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons.html....
...and it points out that you can't really do much with CoreBluetooth without the proximityUUID. That said, what if I actually DO have it?
What i want to do is place iBeacons around a given location. I'll use the didEnterRegion
CLLocationManager delegate method to know when we've entered the region. I want to use that to trigger some CoreBluetooth monitoring of the beacons so it can be done in the background. I only need the RSSI and a unique identifier (I can do without the Major and Minor for now), which i've been able to get in the foreground, but not in the background.
I was under the impression that I should still be able to get this basic data in the background if my app had 'bluetooth-central' (now "App Communicates using CoreBluetooth") set.
Can you shed any light on what I'm trying to do? At present, it doesn't seem like anyone else has tried this and I'd love to get it going and share it, as it seems like a viable work-around if I can get past this barrier.
Thoughts?
Any iOS device that supports sharing data using Bluetooth low energy can be turned into an iBeacon. Apps that use their underlying iOS device as an iBeacon must run in the foreground. As a result, use this feature for point-of-sale apps or for apps that are meant to run in the foreground anyway.
IBeacons are used to send contextually aware, value driven messages to consumers. Beacons should be about providing value to the customer, not just advertisements. In a store this could be product information, while in an airport it could be flight information once they arrive at the gate.
Apple's iBeacon Using low-powered transmitters, iBeacons emit advertising data using Bluetooth LE. Devices can detect these iBeacons by scanning for specific advertising data.
Go to Settings in the app menu. Tap on iBeacons. Select your iBeacon (If there is more than one in the area, you can identify yours using the 4-digit code on its side) If you have more than one vehicle in the app, choose the one you'll use the iBeacon for from the dropdown menu.
As mentioned in the blog post, you cannot get any of the iBeacon identifiers out of the CoreBluetooth APIs because iOS does not provide access to the raw advertising data that encapsulates these identifiers.
You may be able to do correlations. If only one BluetoothLE device is visible, and you just saw an iBeacon using CoreLocation APIs, you can continue to track the beacon with CoreBluetooth, reading the RSSI as you suggest.
The trouble comes when multiple BluetoothLE devices are visible. Without access to the iBeacon identifiers in CoreBluetooth, how will you know which device you are seeing in CoreBluetooth lines up with which of the iBeacons you see with CoreLocation? Unfortunately, I do not think there is any way to match them up.
As suggested, is not possible but almost every big manufacturer like Kontakt.io or Estimote uses a special UUID Service for identifier, battery and other things.
You can write your own framework that recognize this kind of iBeacon using CoreBluetooth, keep in your mind that Service UUID data is not the major, minor, uuid etc.. but just an identifier of a device, you should definitely create a database or plist with matching between id of Service data and UUID, major and minor of iBeacon.
In this way you are able to take every packet from iBeacon and do your stuff with it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With