在ios上进行后台可扩展扫描

在ios上进行后台可扩展扫描,ios,swift,bluetooth-lowenergy,Ios,Swift,Bluetooth Lowenergy,我有两个设备。。广告和扫描UUID。在前景和背景中。下面是播发代码和扫描代码 问题很简单。2台设备在后台发布广告、扫描并尝试发现对方 在前景中,两台设备都能够很好地发现对方 但是,当两台设备都位于后台时,它们不会相互发现/重新发现。苹果的文档已经表明,CBPeripheraldAllowDuplicates键在后台被忽略,因此它不会重新发现已经发现的设备 然而,通过查看stackoverflow上的其他文章,我发现如果在后台重新启动扫描,扫描会被重置 为了实现这一点,我发送了一个外部推送通知(正

我有两个设备。。广告和扫描UUID。在前景和背景中。下面是播发代码和扫描代码

问题很简单。2台设备在后台发布广告、扫描并尝试发现对方

在前景中,两台设备都能够很好地发现对方

但是,当两台设备都位于后台时,它们不会相互发现/重新发现。苹果的文档已经表明,CBPeripheraldAllowDuplicates键在后台被忽略,因此它不会重新发现已经发现的设备

然而,通过查看stackoverflow上的其他文章,我发现如果在后台重新启动扫描,扫描会被重置

为了实现这一点,我发送了一个外部推送通知(正式接收),它在后台重新启动扫描

然而,它只在“某些情况下”产生重新发现。我已经在很多设备上进行了测试:6s、7、7 plus、8、iphoneX、ipad等以及其他多种手机

它在某些情况下有效,但在其他情况下无效。Ios版本在所有情况下都是12.3.1

这里也没有出现模式——它在一些7上有效,在一些7上无效,在一些iphone 6上有效,在一些不起作用

有人能帮助理解这里的问题吗?是什么导致了这种行为?我们如何使重新发现保持一致?

我们已经尝试过的其他事情: 1.在停止和启动扫描中设置延迟 2.记录以查看中央管理器的状态是否更改-未检测到任何更改

let serviceUUID = CBUUID(string: "8D38A460-2F8A-4D1C-8509-324B0377AE44") let service = CBMutableService(type: serviceUUID, primary: true)
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    var centralManager: CBCentralManager!
    var peripheralManager: CBPeripheralManager! }

extension AppDelegate: CBPeripheralManagerDelegate {
    func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) 
{
        switch peripheral.state {
        case .poweredOn:
            os_log("advertising")
            peripheralManager.add(service)
            peripheralManager.startAdvertising([CBAdvertisementDataServiceUUIDsKey: [serviceUUID]])
        default:
            break
        }
    }
}

below is scan code:

func scan() {
        centralManager.stopScan()
        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0)
        {let scanOptions = [CBCentralManagerScanOptionAllowDuplicatesKey: true] as [String : Any]

            self.centralManager.scanForPeripherals(withServices: [serviceUUID], options: scanOptions)

        }

    }
}


    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
        os_log("discover: %{public}s", peripheral.description)
    }
}

我希望它在所有设备上都能一致地显示重新发现功能

您是否找到了我身上存在类似问题的解决方案?谢谢