iBeacons: how to get broadcasted beacon power (txPower)

cllocationmanager, core-location, ibeacon, ios

Solution

Unfortunately you can not get this value programmatically with either `CoreLocation` or `CoreBluetooth`. Apple blocks access to all iBeacon data with `CoreBluetooth` (See my breakdown of this here.) Similarly with `CoreLocation` it is simply not exposed in the `CLBeacon` class as you have seen.

Since you say you can't to do a reverse-calculation, then the only other ways I can think of to do this are:

- Use an Android, OSX Mavericks, or Linux device, which offer no such restrictions on reading this field.

- Make a lookup table in your iOS app of all your iBeacons (with unique UUID/major/minor values vs. their txPower value)

Option 2 above obviously requires that you assign unique identifiers to all your iBeacons under test.

Problem

iBeacons seem to broadcast their txPower parameter (report RSSI power at 1 meter distance) which is used in calculating `beacon.accuracy` and `beacon.proximity` properties (details on iBeacon advertisements packet can be found here). However, `CLBeacon` class does not seem to have a property for txPower. Is there a way I can get txPower using Core Location framework, or need I to go down to Core Bluetooth? The reason I need this, is I want to experiment with custom beacon accuracy/proximity calculation for very quick beacon immediate range discovery. In this circumstances reverse calculating txPower from `accuracy` is no helper.

Original source

Related problems