iBeacon
Overview
Add indoor location awareness and mapping capabilities to your app through the use of iBeacons and proximity scanning.
This module allows the scanning of nearby Bluetooth Low-Energy beacons that conform to the iBeacon spec. It provides Median JavaScript Bridge commands to retrieve the list of nearby beacons and their identifying information.
An iBeacon continuously broadcasts three identifiers: a UUID, major, and minor. UUID is a long random identifier that should be customized for each implementation. Major and minor are integers between 0 and 65535 that can be used to differentiate each individual beacon. For example, a retailer may have one UUID across all of their iBeacon deployments used for their retail customers, and another UUID used for employees. Each store may have a major identifier, and each individual beacon would have a different minor identifier.
The beacon broadcast data also encodes the emitting signal power. By comparing this to the actual received signal power, devices can estimate their distance from each beacon.
As Bluetooth beacons can be used to identify the user's physical location, this is considered a privacy sensitive function. iOS requires the user to grant location permissions. Android also requires the user to grant permissions starting with Android 10.
Implementation Guide
Once the premium module has been added to your app, you may use the following Median JavaScript Bridge commands to access its functionality.
You must provide a specific UUID to scan for iBeacons on iOS as Apple does not permit iOS devices to scan for all UUIDs.
Define a callback function that will receive the beacon data. For example:
// define this function, but do not call it yourself!
function callback(data) {
if (data.success) {
alert('I found ' + data.beacons.length + ' beacons');
}
}
↔️Median JavaScript Bridge
To initiate a scan, run the following JavaScript function.
uuid
can be omitted for Android but is required for iOS.median.beacon.scan({'callback': callback, 'uuid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'});
Within a few seconds of a successful scan, the app will run your callback
function with a data object with the fields:
success
: set to true. This does not indicate that any beacons were found, only that the scan did not encounter errors.beacons
: an array of beacon objects, each containing the fields:format
: a string, set to "iBeacon"uuid
: a stringmajor
: an integerminor
: an integerrssi
: signal strength in decibelsproximity
(iOS only): "immediate", "near", "far", or "unknown"accuracy
(iOS only): the accuracy of the proximity calculation in metersdistance
(Android only): the estimated distance of the beacon in meters
For example:
{
"success": true,
"beacons": [
{
"format": "iBeacon",
"uuid": "9C615AD4-8E6A-53BC-BC27-82171491A2WA",
"major": 1000,
"minor": 123,
"rssi": -52,
"proximity": "immediate",
"accuracy": 0.1413
},
{
"format": "iBeacon",
"uuid": "9C615AD4-8E6A-53BC-BC27-82171491A2WB",
"major": 1001,
"minor": 1321,
"rssi": -78,
"proximity": "near",
"accuracy": 4.5321
}
]
}
If the scan fails, the data object will have the fields:
success
: set to falseerror
: a string that describes why the scan failed
For example:
{
"success": false,
"error": "This device does not support Bluetooth LE"
}
Typical reasons for a scan to fail include the device not having the necessary hardware, Bluetooth being disabled, or the user denying location permissions.
Updated 12 months ago