My team is having some issues with Estimore iBeacon and below are my questions about it:
- Why our device is leaving the iBeacon region and enter again randomly although the device is just (30cm) beside the iBeacon and the broadcasting radius is ~7m (sort of spamming, nonstop), it occurs randomly. Sometime it works great. Any idea what is causing this?
- It take 30seconds to leave the iBeacon region, could we configure it to be less?
- Understand that the iBeacon region might reduce or expand depend on the environment, we wish place iBeacon on several area and these area are closely located. iBeacon is located at area A, user at area B. When its signal is strong, sometimes user at area B detected to be area A. Is there any method to increase the precision or accuracy?
- Why sometime there is a delay of receiving the push notification from iBeacon, it might delay for a few seconds and sometime took a minute for us to receive the push notification. What is causing the delay? Could you tell us how the behind mechanism flows/works?
Amongst all of the question above, if it happen that it is the nature of iBeacon, how can we prevent the it on the coding level?
Would be appreciate if anyone could give me your suggestion/opinion. Thanks guys.
For exta information, we have been using only the monitoring function (start monitoring, did enter region & did exit region)
Thanks for a detailed writeup. On to your questions:
I actually recently answered an identical question on Stack Overflow, please take a look: http://stackoverflow.com/a/33859311/1900855
Unfortunately, this is non-configurable for monitoring on iOS.
Not much to be done on the hardware side—RSSI of Bluetooth devices is inherently unstable. But you can do some filtering on the software side.
For example, when you’re in area B, and get an “enter” event for area A, start ranging and compare the
accuracy property of the two beacons. If beacon A has consistently lower accuracy value over a few ranging results, it means it’s closer than the beacon B (lower accuracy value = more accurate signal = closer to the beacon). And vice versa. Based on that, you can figure out whether it was just a temporary spike that triggered the “enter” event, of it was really the user moving to that area.
Apple doesn’t guarantee the iOS beacon events to happen instantaneously. They often do, but e.g., if the phone is in deep sleep (i.e., haven’t been used for a while), it might happen that the enter event is delayed. I’m afraid there’s no known workaround for that.
Also, the beacon needs to be detected with a certain strength (specifically, RSSI greater than -88, if I remember correctly) for the enter event to trigger. If you’re barely in range of a beacon, but the signal is very weak, enter event won’t trigger.
I hope these answers at least provide some insight into what you’re experiencing. Sorry I couldn’t provide more actionable ones.
Thank you for your explanation, here is something extra for question 4:
- Why sometime there is a delay of receiving the push notification from iBeacon, it might delay for a few seconds and sometimes took a minute for us to receive the push notification. What is causing the delay? Could you tell us how the behind mechanism flows/works?
I noticed the delay only applicable when our app is being killed (happen only in monitoring mode). And to enter the region (monitoring mode), it takes 20seconds to 2minutes (average 1 mins) to get into the region. While the delay for ranging mode is reasonable fast (1 seconds to 10 seconds average 2-3secs). I found out even the app is killed, when iBeacon is in sleeping (flip to sleep), waking iBeacon allow us to get a quick enter region too. Any suggestion to get a quick enter region when the app is killed and iBeacon is active (not in sleep)? We would go for monitoring mode if possible.
Ranging will always be the same or more responsive than monitoring, as it actively scans for beacons; whereas monitoring, whenever possible, defaults to passive scan to conserve energy. For example, if your app is in the foreground, you can start ranging and this will greatly improve responsiveness of monitoring (as it keeps the Bluetooth radio active). This doesn’t help when the app is not running though, as ranging stops as soon as the app gets suspended or killed.
What device are you testing with?