During the 2013 WWDC alongside iOS7 Apple announced an exciting addition to its CoreLocation framework – a technology that could finally solve the problem of indoor location detection – iBeacons, by leveraging the under-utilised (at the time) Bluetooth Low Energy. The framework was hard to test at first due to lack of hardware providers for the actual beacons, but several startups and companies soon jumped at the opportunity and we could finally give it a proper shot. However, particularly in early releases of iOS7 the iBeacon tech seemed to disappoint with its poor accuracy and reliability. While the concept got a lot of developers excited, the amazement quickly turned into frustration. So, how well do iBeacons actually work nowadays?
Less than a year after release, I took part in making some experimental apps.
One which was a guided tour of an office building – related information was displayed when a new room was entered. The beacon accuracy wasn’t particularly important since the space was large. The demo worked fine, especially when the application was running in foreground.
The other one was done at Úll Conf 2014 and relied on the conference app waking up in background
. For the first time we could test the setup across >100 devices. We’ve announced a scavenger hunt: once a device came in range with a beacon installed at one of our secret locations, an achievement badge was unlocked in the app. The experiment results were mixed, some things worked, some didn’t (I’ve summarised them last year
). iBeacons seemed a little too young to be more than a curiosity. When iOS7 was updated with further fixes and later iOS8, we finally saw improvement
. Apple was clearly updating iBeacons and other features which suffered from similar issues (e.g. multi-peer connectivity which was practically a dummy API in the initial release of iOS7). It’s understandable that these things take time to perfect and need to be tested in live conditions, which for a secretive company like Apple was impossible to do before the announcement. So, how far have we come?
“Well, this is going to be a problem.”
Fast forward to April 2015, I’ve attended Úll Conf again and this time we decided to try out a more ambitious setup. We’ve had a perfect opportunity to put together an audio tour to the Museum feature, which was a small exhibition of Apple devices and memorabilias. We had 12 kontakt.io beacons which we installed on some exhibition items.
In the end it worked out quite well:
However, things didn’t start off very well at all. After we’ve setup the beacons, I’ve quickly realised that the app, which was tested against a much simpler setup didn’t behave the way we wanted. This was due to a several problems I’ve observed:
Ranging is far from perfect
On iOS8 I’ve noticed a lot of improvement in the ranging results, but occasional issues still arise:
- beacons may randomly drop off: don’t be surprised when a ranged beacon disappears only to re-appear on next range
- When looking at RSSI, be aware that it is equal to 0 when the beacon is in unknown proximity:
CLBeacon (uuid:…, major:0, minor:1, proximity:0 +/- -1.00m, rssi:0)
- approximate distances are inaccurate and signal strength reading may fluctuate
When using multiple beacons in a dense setup these inaccuracies will prove particularly difficult.
make sure your ranging code compensates for some of these issues: if you’re displaying content for the nearest beacons, don’t trust the result immediately, put a threshold on when a beacon is considered as “the nearest beacon”.
- compensate with the user flow. We’ve been very ambitious: the app would display content as soon as a new beacon was considered the closest. On top of that we’ve set the audio to play automatically. This meant that when things went wrong, the current audio track for the item was interrupted with the false-positive result. Why not advertise that a location is available, but allow the user to confirm interaction in a non-intrusive way.
- compensate with how you structure your information. E.g. you could cluster several items around a single beacon, instead of having a really dense setup.
The way you compensate will have its trade offs, so you want to pick the right trade off for your use case.
Different devices will give different results
Besides issues with ranging itself, remember that different iPhone/iPad models will have different chipsets and construction. That will lead to inconsistent results.
Here’s a sample i recorded at the Museum, when standing ~50cm from beacon no 1. (iBeacon was behind glass). Each device was in exactly the same spot.
Spot the iBeacons! ;)
As you can see, even the loose definition of the three proximity states …Isn’t loose enough!
- Immediate: Within a few centimeters
- Near: Within a couple of meters
- Far: Greater than 10 meters away
To avoid fluctuations between beacons, one of the things I’ve tried was to accept only beacons ranged as “immediate” but it was surprisingly rare to observe that state on the old iPad Retina.
Background location monitoring doesn’t work immediately after boot
This is a really important thing to remember when testing background ranging capabilities. Give it at least 10mins for iOS to start looking for your location in background. If you expect for your app to wake up soon after a restart, it won’t work. iOS is taking its time to wake up all of its background services. This is a rare case when the common “have you tried turning it on and off?” approach, actually makes things worse.
Testing iBeacons will require a bit of patience and may require some ingenuity, just ask Ben Dodson
and his — clever way to “simulate” entering and leaving regions:
iBeacons aren’t perfect, but they’ve certainly improved. Simple use cases will work pretty well. More complex use cases just require a bit of extra care. The technology enables a lot of new possibilities, from simple ideas like reminding your conference attendees what the WiFi password is when they arrive at your venue, to an immersive shopping or museum experience.
What worries me a little is that we haven’t seen a lot of real case studies in the wild. Imagination’s the limit, but clearly iBeacons haven’t been fully embraced yet. It certainly may be due to their rough start, but as with any technology, if it’s used for its own sake and doesn’t provide actual value to end users, it’s usage is doomed to fail. Can iBeacons actually add real value to the mobile experience? Are they reliable enough to do so? I think so, but during development, make sure you understand their quirks and limitations.
If you want to play with iBeacons, you can do it easily by building something with Glide – our app creation platform. Check it out here