Introduction of Beacon Pros marks a change of how beacons broadcast their advertising packets. Starting with Beacon Pros we divide all possible advertising packets into four groups:
- Eddystone (UID, URL, TLM)
- Encrypted Eddystone (EID, ETLM)
- Kontakt.io Secure Profile
Thanks to the new Nordic Semiconductor nRF52 Series chipsets Beacon Pros use separate virtual BLE broadcasters to send packets from each group. Because of that, packets from different groups have different MAC addresses, so by 3rd party scanners they are treated as packets sent by unrelated beacons.
Having packets that are treated by scanners as coming from different sources allows us to make all iBeacon and Eddystone packets non-connectable (ADV_NONCONN_IND), but at the same time we keep Beacon Pros easily configureable through Kontakt.io Secure Profile which is the only connectable (ADV_IND) packet broadcasted by Beacon Pros. This way we increase compatibility and discoverability of standard advertising packets (iBeacon, Eddystone) while maintaining the ability to configure Beacon Pros at will, just like any other Kontakt.io device. In order to provide compatibility with iOS and Android devices, Beacon Pros are capable of responding to Scan Requests with a Scan Response packet that is associated with connectable Kontakt.io Secure Profile packet.
Kontakt.io Secure Profile is also the only packet that can't be disabled on Beacon Pros. It is also the only packet broadcasted when a Beacon Pro is in a Power Saving mode, no matter how many other packets were enabled for normal operations.
The advertising interval on Beacon Pros works mostly the same way as on other beacons – it sets a time period between each packet, so the time between the same packet might vary depending on a number of different advertising packets enabled on a beacon. The only exception is Kontakt.io Secure Profile packet – it is broadcasted with a separate, fixed interval of 500 ms. It's possible that the Kontakt.io Secure Profile packet's broadcasting schedule might interfere with the schedule of iBeacon and Eddystone packets' advertising interval. In these instances Beacon Pro will automatically adjust the broadcasting time of Kontakt.io Secure Profile packet or iBeacon/Eddystone packets, making sure there are at least 100 ms between them.
Since there is no way to bind Beacon Pro's iBeacon or Eddystone advertising packets with each other and with it's Kontakt.io Secure Profile (different MAC addresses), Location Engine reports each packet as a separate sighting of different devices. Since iBeacon and Eddystone packets are non-connectable, so they don't trigger scan requests on Gateways and don't send scan response packets with additional data, they are assigned their own Tracking IDs in form of their virtual BLE broadcasters' MAC addresses. Detections of Kontakt.io Secure Profile packets are, on the other hand, reported with Beacon Pro's Unique ID as a Tracking ID. Because all of that a single Beacon Pro can be reported from 2 to 4 times, depending on the number of active packets.
When Kontakt.io Android SDK detects an iBeacon or Eddystone packet coming from a non-Beacon Pro beacon (nRF51-based) it automatically associates it with data from a corresponding scan response packet. Because of that IBeaconListener or EddystoneListener report all possible information about a beacon in IBeaconDevice/IEddystoneDevice object. But since we can't use MAC addresses to link data from Kontakt.io Secure Profile and iBeacon/Eddystone packets on Beacon Pro together, these listeners will report devices only with iBeacon/Eddystone data, but without Kontakt.io-specific information like Unique ID, battery level, etc. There is a special Beacon Pro-specific listener to get this data - SecureProfileListener - but for the same reason it won't be able to get iBeacon/Eddystone identifiers.