我刚刚使用服务和特征UUID创建了我的广告外设。
以下是我的服务和特征UUID:
let kTRANSFER_SERVICE_UUID = “29ada058-c7d6-4ed5-bc7f-1c7b0458b3b8”
let kTRANSFER_CHARACTERISTIC_UUID = “91e032f2-c915-47c6-a8d9-6b3bc6c8e73d”
现在我创建了CBPeripheralManager实例。
private var peripheralManager: CBPeripheralManager!
private let beaconOperationsQueue = DispatchQueue(label: "beacon_operations_queue")
private let option = [CBCentralManagerScanOptionAllowDuplicatesKey:true]
// Assign peripheralManager with Queue & Option
peripheralManager = CBPeripheralManager(delegate: self, queue: beaconOperationsQueue, options: option)
我现在正在调用StartAdvertising方法,但是这只能在前台模式下工作, 现在我想在后台模式下允许它工作,因此我在Info.plist中添加了UIBackgroundModes关键字。
public func startAdvertising(serviceID: String, name: String) {
let valueData = name.data(using: .utf8)
self.serviceID = CBUUID(string: serviceID)
self.peripheralName = name
let CustomChar = CBMutableCharacteristic(type: CBUUID(string: kTRANSFER_CHARACTERISTIC_UUID), properties: [.read], value: valueData, permissions: [.readable])
let myService = CBMutableService(type: self.serviceID, primary: true)
myService.characteristics = [CustomChar]
peripheralManager.add(myService)
if self.peripheralManager.isAdvertising{
self.peripheralManager.stopAdvertising()
}
peripheralManager.startAdvertising([
CBAdvertisementDataServiceUUIDsKey: [serviceID],
CBAdvertisementDataOverflowServiceUUIDsKey:[serviceID],
CBAdvertisementDataLocalNameKey: peripheralName!])
}
当进入后台时,会发生以下情况:
CBAdvertisementDataLocalNameKey广告键将被忽略,周边设备的本地名称不会被广告。
CBAdvertisementDataServiceUUIDsKey广告键中包含的所有服务UUID将放置在特殊的“溢出”区域中;它们只能被显式扫描它们的iOS设备发现。
我已经设置了“Overflow”,但仍无法在后台模式下工作,有人可以为此提供指导吗?