Beacons are a pretty hot topic these days. They offer exciting new ways of presenting proximity-based content to an ever-growing mobile user base. I have been working with multiple brands of beacons over the past 8 months and thought I would share some of my observations.
- iBeacon is trademarked term, not a device (not yet, at least). The terms Beacon and iBeacon are used interchangeably, and although all devices carrying the iBeacon logo are BLE Beacons, not all BLE Beacons can be considered “iBeacons”. If a BLE device manufacturer wishes to carry the iBeacon logo, it must be certified by Apple (as part of the Apple MiFi program).
- Apple limits the number of regions you can simultaneously monitor to 20. There are ways to mitigate this potential drawback, such as only monitoring specific regions as you enter or exit other regions, but I have never encountered a situation where I needed more than 20 (your use-case may be different).
- You cannot scan for UUIDs with iOS (you can on Android). iOS locks this particular functionality. Your app must know which UUIDs (Beacons) to listen for, it cannot simply scan for all BLE devices broadcasting UUIDs. Again, this is only a limitation on iOS.
- You cannot (at least not yet) test a Beacon-aware app in a simulator, you must have a physical device (phone).
- If your beacon-aware app is closed or in the background it will still monitor for region triggers (exit/enter) but it will not actively range for beacons. There is one exception to this rule: your app WILL actively range for beacons whenever it enters or exits a region but only for about 10 seconds. Ranging is when you app is actively trying to determine it’s proximity to surrounding beacons (that it has been programmed to look for). Continuous ranging for beacons can only occur while the app is in the foreground (read:OPEN). This isn’t a critical issue but good to know when you are testing a beacon-aware app.
- Many Beacon manufacturers provide SDKs for interacting with their Beacons. The SDKs provide extended functionality and control but you don’t necessarily need to use an SDK to create a beacon-aware app. The iOS Core Location Library is really all you need to create a basic (but very functional) beacon-aware app. Most of my development with Beacons has been with Xamarin.iOS and I’ve created a generic app to demonstrate how you can develop a beacon-aware app using just the Core Location library. You can find it here http://goo.gl/M06ddu.