4
votes

I am looking for help in understanding some iBeacon reliability issues that I have been observing when monitoring for iBeacons using CoreLocation.

I have a set of beacons with the same UUID, but different major and minor numbers. My program is set up to monitor all of them (not range). I have the transmission power at the absolute minimum for the beacons (supposedly resulting in a 5ft beacon region radius). Sometimes it works great, but I've observed some inconsistent behavior including:

  • Walking up to a beacon and never receiving an entry event (even when standing next to it for several minutes)
  • Receiving enter events from far away beacons (when already inside of different region and not moving)
  • Intermittent exit/enter events when sitting inside of a beacon region (this seems to be common from reading other posts)

I'm am interested in any best practices that folks might be aware of for iBeacons. The issues that I am observing seem to stem from unreliable transmission ranges and fluctuating beacon signal strengths. Is there an easy way to improve this issue?

My goal is to have several beacons in close proximity. Should I consider ranging to help reduce some of the reliability? If so, it's my understanding that you can't range reliability in the background.

Additionally, I'm trying to confirm whether or not you will receive and enter event if your app starts already inside of a beacon region?

2

2 Answers

2
votes

Generally speaking, turning down the transmitter power of a beacon yields very unreliable detections even a close range. This is because weak signals mean low signal to noise ratios, which cause intermittent failures to detect beacons as background noise and variations in geometry change over time. This is what causes the entry/exit events you describe.

The alternative is to maximize the beacon transmitter power and to rely on beacon ranging to filter out beacons that are far away based on estimated distance or raw signal strength (RSSI). This will generally prove more reliable because stronger transmissions have higher signal to noise ratios, and are less susceptible to radio noise and other environmental changes.

The main challenge with this alternative is that ranging beacons is limited by iOS in the background to 10 seconds of each region entry/exit, or an extended 180 seconds upon request. You can do unlimited background ranging if you request special location background permissions, but this requires special AppStore approval and uses more battery.

Will this work for your use case? It depends on the specifics of what you are trying to accomplish, and how often users dwell near the beacons. You might also be able to game the system by placing beacons in a way that cause entry/exit events.

Finally, while you do not get a region entry notification on app start, you can dynamically request a region in/out status at any time, which should work fine for your needs.

1
votes

As an interesting tidbit: last time we measured it, the RSSI threshold above which the beacon is considered "in range" by monitoring was -88 dBm, inclusive. (i.e., you will get an "enter" if the RSSI goes above this value; and an "exit" if it drops below it—just keep in mind the 30-second exit delay)

For a troubleshooting exercise, you could start ranging for your beacon and logging the RSSI values, and check how they compare to this threshold depending on your position relative to the beacon.