Search code examples
iosbluetooth-lowenergybackground-processbeacon

Can iOS app act as beacon, even when it is running in the background?


I need my app to act as a BLE beacon, even when it is in the background. I've already made the beacon part - works fine when I'm using the app.

The problem is I've never made anything run in the background before, and not sure what the limitations are - if I will be allowed to let the app act as a beacon in the background.

Was wondering if this is possible or not (both technically, as well according to App Store rules)

  1. Is this technically possible ? Can my app act as a beacon, even when the app is not in the foreground.
  2. Is it within App Store rules ?

Solution

  • Unfortunately, iOS apps cannot emit iBeacon advertisements unless they are in the foreground. If you program your app to advertise iBeacon frames, as soon as the screen turns off or the app is not visible, iOS changes the advertising format to a special generic background advertisement that does not match the iBeacon format.

    This proprietary background advertisement is useless for identification of a device. It is designed for connection to BLE GATT services from other iOS devices. Unless you want to advertise a connectable BLE GATT service to other iOS devices this advertisement has little value. EDIT: There is a way to make use of this advertisement. See below.

    Apple's documentation describes this limitation here in the section titled "The bluetooth-peripheral Background Execution Mode":

    you should be aware that advertising while your app is in the background operates differently than when your app is in the foreground. In particular, when your app is advertising while in the background:

    The CBAdvertisementDataLocalNameKey advertisement key is ignored, and the local name of peripheral is not advertised. All service UUIDs contained in the value of the CBAdvertisementDataServiceUUIDsKey advertisement key are placed in a special “overflow” area; they can be discovered only by an iOS device that is explicitly scanning for them. If all apps that are advertising are in the background, the frequency at which your peripheral device sends advertising packets may decrease.

    It may not be obvious that the above causes iBeacon transmissions to break, but I assure you that is absolutely a consequence.

    Read my blog post here for more information on how to put useful beacon data into this background "Overflow Area" advertisement.