Beacon Ranging in Background on iOS

Hi everyone,

I understand the limitation of iOS in that ranging can only happen in the foreground or in the background when entering and exiting regions as explained here (http://developer.radiusnetworks.com/2013/11/13/ibeacon-monitoring-in-the-background-and-foreground.html). But I'm trying to figure out how to solve a common scenario.

If I had a bunch of beacons installed in a building. How am I supposed to detect when a person moves within range of those beacons? With the way it currently works, the app will get an event when the user enters the building (didEnterRegion) because the collection of all beacons acts as one big region. But there's no way to know that a user is moving between those beacons unless the beacons are placed far enough for the user to exit and enter the region again.

This seems to me like a very common scenario for malls and museums, etc... I'm wondering how other developers solved this or whether there's another way of achieving what I want.

Thanks

Hi Moe,

I think what you're referring to is monitoring.
Those two concepts are quite similar and it's easy to mix them app.

So ranging is for knowing the relative distance between a beacon and device, while monitoring is for detecting user's presence in the vicinity of the beacons.

Here is a good explanation of how could it be applied in your use case:

"You can use this functionality to show alerts or provide contextual aware information as a user enters or exits a beacon's region. Beacon's regions are defined by beacon's values:

  • proximity UUID: 128-bit unique identifier,
  • major: 16-bit unsigned integer to differentiate between beacons within the same proximity UUID,
  • minor: 16-bit unsigned integer to differentiate between beacons with the same proximity UUID and major value.

Note that all of those values are optional. That means that single region can contain multiple beacons which creates interesting use cases. Consider for example a department store that is identified by a particular proximity UUID and major value. Different sections of the store are differentiated further by a different minor value. An app can monitor region defined by their proximity UUID and major value to provide location-relevant information by distinguishing minor values."

Read more: https://github.com/Estimote/Android-SDK

Let me know, if you have any other questions.

Thanks for the answer Ola.

I know the difference between monitoring and ranging. What I want is to range in the background. So in your example, when a user enters the department store, the app will get a region entry event because it's monitoring in the backround. but once they are in the store, there doesn't seem to be a way to range beacons to know exactly where the user is standing or what beacons they're getting close to inside that region. That's what i'm trying to achieve.

Hi Moe -- let me chime in.

Ranging in the background is in fact possible, but I'd recommend to only use it as a last resort, as it'll heavily impact the battery life and you'll need a good reason to push it through the Apple's app review team.

You could monitor for each single beacon, though this solution doesn't scale well as there's a limit of 20 regions that can be monitored at a time by a single app.

If you could tell me more about your use case, maybe I'll be able to help. We actually rarely see people needing ranging in the background -- most of the value in apps usually come from when they're in the foreground, with monitoring in the background used to kick off certain actions. Feel free to hit me at piotr (at) estimote.com if you want.