I've been playing around with using iOS devices as both broadcasters and receivers using the new iBeacon API's in iOS 7.
The docs don't go into detail at which distances the receiving device should see each proximity indicator, and specifically calls them out as "relative". When experimenting a with a demo app, I observed these distances (iPhone == receiver, iPad == broadcaster):
Far - 50 feet?
Near - 2-3 feet
Immediate - 2 inches
These seemed really small to me, and there is perhaps a hint in the CLBeaconRegion class reference, which allows you to specify the signal strength of your device from 1m away.
peripheralDataWithMeasuredPower:
Retrieves data that can be used to advertise the current device as a beacon.
Parameters
measuredPower
The received signal strength indicator (RSSI) value (measured in decibels) for the device. This value represents the measured strength of the beacon from one meter away and is used during ranging. Specify nil to use the default value for the device.
My amateur calibration yielded -60, which I set and re-tested:
Far - hundreds(ish) feet
Near - ~50 feet
Immediate - 1 meter (slightly less)
Are the results from my second test the "ideal" ranges according to Apple? They are really far away from the "default" setting I experienced in the first test.
Or should I perhaps consider these ranges "calibratable" depending on my needs?
From what I understood of the API is that there is never a guarantee on actual distance, you should not use the readings to be considered an accurate measurement. The proximity is rather used to determine the relative distance between different beacons so that you can respond accordingly based on your applications requirements.
With that said, Apple definitely draws a gray area in their documentation. The description of measuredPower
is intriguing and easily instils the thought that you can use this value to get an accurate distance reading (once calibrated of course). I just don't think that is the case however, with the likelihood of signal attenuation in these significantly low powered devices, I don't expect you'd get consistently accurate readings of an actual distance.
From the CLBeacon
reference the description of accuracy
reads
Indicates the one sigma horizontal accuracy in meters. Use this property to differentiate between beacons with the same proximity value. Do not use it to identify a precise location for the beacon. Accuracy values may fluctuate due to RF interference.
I feel that this inexplicably resonates throughout the entire usage of the iBeacon feature.
This is all my interpretation, I've not gone as fas as testing this in multiple environments over time to see if consistent readings are given. I am not sure if this helps at all.