iOS: didDiscoverPeripheral not called in Background mode

后端 未结 4 2144
情歌与酒
情歌与酒 2020-12-10 08:39

I am Working on BLE project, everything works fine when the app in the foreground.It can discover and connect to the peripheral, all the call back method work perfectly.

相关标签:
4条回答
  • 2020-12-10 08:53

    Paulw11 said are right, If your app find the peripherals in the foreground. It will not call the didDiscoverPeripheral for the same peripherals when it enters the background.

    For more information about the iOS BLE Behavior in the background mode. You can check this answer What exactly can CoreBluetooth applications do whilst in the background?

    0 讨论(0)
  • 2020-12-10 09:01

    I was working on Estimote Nearable type beacons. After iOS10 SDK update, I encountered exception from CBCentralManager stating :

    <CBCentralManager: 0x17009e050> has provided a restore identifier but the delegate doesn't implement the centralManager:willRestoreState: method

    To fix this, Turn-On "Background Mode", in Xcode -> Capabilities -> Background Mode

    0 讨论(0)
  • 2020-12-10 09:11

    Scan for nil( scanForPeripheralsWithServices:nil) services will not work in background. You must search for some specific service in background.

    You have to set the UUID in scanForPeripheralsWithServices: method which Peripherals/BLE device is advertising.

    0 讨论(0)
  • 2020-12-10 09:11

    From Official Apple reference

    You can provide an array of CBUUID objects—representing service UUIDs—in the serviceUUIDs parameter. When you do, the central manager returns only peripherals that advertise the services you specify (recommended). If the serviceUUIDs parameter is nil, all discovered peripherals are returned regardless of their supported services (not recommended). If the central manager is already scanning with different parameters, the provided parameters replace them. When the central manager object discovers a peripheral, it calls the centralManager:didDiscoverPeripheral:advertisementData:RSSI: method of its delegate object.

    Apps that have specified the bluetooth-central background mode are allowed to scan while in the background. That said, they must explicitly scan for one or more services by specifying them in the serviceUUIDs parameter. The CBCentralManagerOptionShowPowerAlertKey scan option is ignored while scanning in the background.

    Here

    Apps that have specified the bluetooth-central background mode are allowed to scan while in the background. That said, they must explicitly scan for one or more services by specifying them in the serviceUUIDs parameter.

    So scanForPeripheralsWithServices:nil with nil it will not work in background , you need to specify list of UUIDS

    0 讨论(0)
提交回复
热议问题