GoNative

The GoNative Developer Hub

Welcome to the GoNative developer hub. You'll find comprehensive guides and documentation to help you start working with GoNative as quickly as possible, as well as support if you get stuck. Let's jump right in!

Get Started    

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 GoNative 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 GoNative JavaScript Bridge commands to access its functionality.

You must provide a specific UUID to scan for iBeacons. 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');
  }
}

️GoNative JavaScript Bridge

To initiate a scan, open the url:

window.location.href = "gonative://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 string
    • major: an integer
    • minor: an integer
    • rssi: signal strength in decibels
    • proximity (iOS only): "immediate", "near", "far", or "unknown"
    • accuracy (iOS only): the accuracy of the proximity calculation in meters
    • distance (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 false
  • error: 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 2 months ago

iBeacon


Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.