iBeacon devices scan and retrieve minor, major, uuid params - ios

Does anyone know if it's possible on iOS to scan the network and then discover all iBeacons devices? After the scan is completed I would like to get for each device the real uuid, minor and major values and check throughout a web service if that particular configuration is saved in my database.
I know that generally on iOS you have to know the proximityUUID and listen to a region using the Beacons API.
Thanks.

It only possible to scan a network for predefined beacon. A beacon region looks for devices whose identifying information matches the information you provide. When that device comes in range, the region triggers the delivery of an appropriate notification. see CLBeaconRegion class here

Related

How can i make iBeacons private

I created an App which is using some iBeacons functionalities. The goal is to add some beacons in some clients stores so the App shows notifications specific for this stores.Now i am using an UUID that is the same for all my beacons and I am managing to identify the store using minor and major values.
How can I make the beacons not accessible by other Apps ? Is there a way to add passwords to beacons or something like this ?
Ok after looking in Estimotes websites i found out that there is a way to lock your beacons.
http://blog.estimote.com/post/103051450215/delivering-on-the-promise-of-beacons-a-modular
To wrap it up: There is a thing called secureUUID. This uuid is changing every couple of minutes. To be able to track this uuid you have to use Estimote cloud service so you can synchronise your app region tracking with beacon.
No this is not possible,iBeacons use very small package size on Bluetooth just sending the UUID and major/minor identifiers.
This has a draw back that you might fake a iBeacon if you know their UUID.

App callback for any iBeacon proximity UUID

I have played around with Airlocate and two iPhones. Also between a Linux /hcitool beacon transmitter and Airlocate ranging. I see that the set of proximity UUIDs to be tracked are hardcoded in the Airlocate source code.
Is it possible for an iOS app to get a more generic call back , when it is in the vicinity of any iBeacon (any proximity UUID) and let that app decide how to go about behaving the way it wants.
I understand that this should definitely be possible from the OS perspective, as I see a 9 byte iBeacon prefix in the start of the PDU, which is independent of the proximity UUID.
Another query - I view hardcoding the proximity UUID in the APP as some sort of pairing . How is general bluetooth pairing different from this.
My aim in asking these questions is to understand the feasibility of using beacons to beam (broadcast) data, so that all recipients in the vicinity can receive it. If I choose to go with a specific 16 byte proximity UUID, then I am left with only 5 bytes (Major/minor/power) to beam data. Otherwise I get 21 bytes
By "more generic call back", it seems like you are trying to listen to iBeacons that are not deployed by you. The answer to this is NO, you can't do that.
According to this post:http://beekn.net/2013/10/ibeacons-can-my-ios-app-find-beacons-that-arent-mine/ , in order to listen to an iBeacon, you must know its proximityUUID first.
Unfortunately Apple decides to limited your ability to do that. CoreBluetooth framework can detect iBeacon nearby but since it only returns the device UUID, not the proximityUUID, you cannot add callback to them.
And Android can read the proximityUUID of any iBeacon without any problem.

Reading iBeacon measuredPower in iOS

According to the ibeacon protocol "measuredPower" is supposed to be sent by every ibeacon in its advertising packet as the last value after uuid, major & minor values. However, the iOS corelocation service does not have any method which returns this "measuredPower". Also, if we reconfigure an ibeacon and change its txPower then the beacon should ideally advertise a different "measuredPower". Do all beacons do this? And how do we fetch the measuredPower of a beacon in iOS/corelocation.
Directly, it's not possible on iOS. The closest you have is the RSSI on CLBeacon. Given a known distance, you should be able to calculate the signal power.

How can we read broadcasted message from unsecured iBeacon?

Is it possible to read iBeacon broadcasting message, that is unsecured without knowing the identifier to connect or monitor them? Basically in iOS you need to specify the UDID of that iBeacon in order to monitor it rather then we need the list of all the beacons that are near by and fetch its broadcasting message like location etc..
On iOS you cannot see iBeacons for which you have not provided the ProximityUUID up front. This is a limitation of the iOS APIs and the operating system.
You can specify up to 20 ProximityUUIDs simultaneously for monitoring (and more for ranging). You can even rotate more UUIDs into your list over time. This would allow you to use a list of known UUIDs from a source like wikibeacon.org to find many beacons nearby. But it will not let you see any beacon with an unpublished and unknown UUID.
For this, you can use a beacon scanner app on Android, OSX or Linux which have no such restrictions.

CLBeacon - Storing and Extracting Info From PeripheralData NSDictionary?

When you start advertising a CLBeacon with peripheral data, can you pass in a NSString or UIImage into this dictionary that you could then have show up when the beacon is discovered?
For example, if I wanted to create write a message to a friend and then when the friend entered the beacon area, could I have the message show up on their phone by storing the message in the NSDictionary and then extracting it? If so, how? If not, is there another way?
Thanks!
So you are asking if you could add extra information to the beacon advertisement that's sent by a beacon device that a custom application could look for?
The answer is no. The iBeacon protocol is a very short, fixed packet of data. There's no facility for adding extra information to the packets.
You could design and implement your own BLE service that's an alternative to iBeacons and implement it on both the transmitter and the receiver.
You could also use a hybrid approach, where you use standard iBeacon discovery to find beacons, and when you detect a beacon you're interested in, trigger a 2-way BLE conversation with the beacon and ask it for additional information. It's my understanding that some of the BLE devices that are being sold as iBeacons can run custom software that would implement this sort of thing. (Many of these devices have ARM processors in them, the same family of chips that power iOS devices.
No, you cannot do this. iOS-based iBeacons (like all other standard iBeacons) will only transmit a three-part identifier and a transmitter power calibration value. That's it. You cannot transmit anything else.
Even if you did make a custom Bluetooth LE advertisement that sends additional data besides the standard iBeacon fields, you wouldn't be able to see this data with the standard APIs for seeing iBeacons.
If you want to tie other data to an iBeacon, you have to do it through another channel, by some kind of lookup that matches the data up with the identifiers above. Three common ways to do this:
Hard-code a static lookup table in your app.
Use a Web Service to look up the value based on the iBeacon identifiers.
Fetch the data directly from a (non-standard) iBeacon using a secondary BluetoothLE communication channel.
My company has a web service called ProximityKit that makes it easy to tie data to iBeacons in your app. You log into a web interface to type in key/value pairs to associate with each iBeacon, then the included iOS client library automatically gives you those key/value pairs when the iBeacon is visible.

Resources