iOS使用AccessorySetupKit配对BLE设备时卡在连接状态
BLE配对卡在Connecting状态(AccessorySetupKit使用问题)
我正在用Swift开发一款BLE应用,采用Passkey Entry:响应方显示、发起方输入的配对方式。选择AccessorySetupKit是因为项目需要获取已配对设备的功能,但目前遇到配对阻塞问题:输入PIN码后iPhone端一直卡在“Connecting”状态——尽管对方设备屏幕显示配对成功,最终iPhone端会超时失败。
测试环境
- iPhone设备:12 Pro、13 Pro Max,运行不同版本的iOS 18
- 待配对设备:多款搭载不同固件的BLE设备
相关代码
ASPickerDisplayItem初始化代码
internal struct MyAccessory { private static let serviceUuid: String = "180A" public static let name: String = "MyDevice" public static let image: UIImage = UIImage( named: "MyImage" )! public static let services: CBUUID = CBUUID( string: serviceUuid ) public static let pickerDisplayItem: ASPickerDisplayItem = { let descriptor: ASDiscoveryDescriptor = ASDiscoveryDescriptor() descriptor.bluetoothServiceUUID = services let pickerDisplayItem = ASPickerDisplayItem( name: name, productImage: image, descriptor: descriptor ) // For Passkey Entry '.confirmAuthorization' is needed pickerDisplayItem.setupOptions = [.confirmAuthorization, .finishInApp] return pickerDisplayItem }() }
应用工作流程代码
public class AccessoriesManager { private var accessorySession: ASAccessorySession = ASAccessorySession() init() { accessorySession.activate( on: DispatchQueue.main, eventHandler: handleSessionEvent ) } public func startScan() { accessorySession.showPicker( for: [ MyAccessory.pickerDisplayItem ] ) { error in if let error { print( "Failed to show picker due to: \( error.localizedDescription )" ) } } } private func handleSessionEvent( event: ASAccessoryEvent ) { switch event.eventType { case .accessoryAdded: /* Continue the configuration */ break default: break } } }
期望行为
希望配对过程和不使用AccessorySetupKit时一致,即通过传统系统弹窗输入PIN码完成配对流程。
内容的提问来源于stack exchange,提问作者BlackWolf4k
相关产品推荐
相关产品推荐

