iOS and Android Apps
There are two kinds of app for use with Beacons. The first, usually supplied by the Beacon manufacturer, is to allow the beacon parameters to be set up. In most cases these apps are just setting Bluetooth Service Characteristic values via an easy-to-use user interface. There are also apps such as Lightblue on iOS and nRF Connect on Android that allow you to read and modify these values directly. These are useful when the manufacturer app either doesn't work well or doesn't support the full range of beacon parameter settings.
The second type of app is one that end users use to interact based on the presence of beacons. Smartphone apps start Bluetooth LE scans that retrieve advertising data. This advertising data usually contains either an Apple iBeacon id (UUID, major and minor) and/or a Google Eddystone-UID/Eddystone-URL. For iBeacon and Eddystone-UID, the app compares this id to pre-created ids in other data in order to determine what to do or show the user. This 'other data' might be bundled with the app at time of install or downloaded from a server. One thing to bear in mind is that many uses of beacons are indoors where there's no or poor connectivity. Hence, it's usually necessary to download the data ahead of time. Eddystone-URL is different in that the Android OS or Chrome on iOS is the app that usually detects the beacon. More details can be found in the article on Eddystone-URL and the Physical Web.
iOS is slightly more challenging in that you can only look for up to 20 different regions at a time, a region being defined as one or more beacons. Again, the regions need to be bundled in the app or downloaded ahead of the time they need to be used. The Android API is lower level and can see all beacons.
Apps can scan either in the foreground when the user is using the app or in background when the app isn't running. Depending on the exact scenario, background use usually results in phone notifications that, if pressed on, start the app.
Most scenarios only use the Bluetooth advertising data. More advanced use involves the app connecting to the beacon to obtain further battery or sensor information. This is done via connecting to known Bluetooth Services (using more pre-known ids) and Characteristics (using even more pre-known ids) to read or modify data. This doesn't tend to be the normal usage mode as connecting to beacons stops them sending their advertising packets and hence stops other phones seeing the beacon. Connecting and reading/writing data is also slower than just receiving the advertising data, especially when many phones need to connect to a beacon because only one phone can connect at a time. It's for these reasons, some newer beacons are starting to put battery and sensor data into the advertising data.
SDKs supplied by beacon providers themselves speed up development considerably. However, you don't strictly need them. If you have trouble with them, don't trust them or want to create a system less dependent on particular providers then you can usually use the Android and iOS APIs directly. There are also alternative, free, open source SDKs such as Radius Network's iOS SDK and the EasiBeacon Android library.
If you want an app for experimentation purposes, take a look at BeaconControl's iOS app that uses the open source BeaconControl server. We understand that an Android version will be available soon. Also take a look at our Beacon Demonstration app that allows you set up triggering within the app and share the setup, via shared group name, with other people running the app.
If you are looking for ready-made 3rd party apps that use beacons then take a look at the personal section of our solutions directory or search for 'ibeacon' in the app stores.
Need a custom app developed? Read about our development services.