簡體   English   中英

核心藍牙:無法讓iPhone(中央)和Mac(外圍設備)配對

[英]Core Bluetooth: Cannot get iPhone (the central) and Mac (the peripheral) to pair

我正在開發一個iPhone應用程序和一個通過藍牙LE相互通信的Mac應用程序。 iPhone是核心,Mac是外圍設備。 我希望iPhone應用程序能夠在重新啟動后重新連接到Mac應用程序。 因此,我在NSUserDefaults中保存代表Mac的外圍設備的UUID,然后當iPhone應用程序啟動時,我調用-[CBCentralManager retrievePeripheralsWithIdentifiers:] ,傳入UUID。 雖然這種方法返回外設,但當我調用-[CBCentralManager connectPeripheral:options:] ,iPhone永遠不會重新連接到Mac。 根據這篇 SO帖子,問題是這兩個設備需要配對,以便Mac的UUID是持久的。 這讓我想到了我的問題。 我不能為我的生活讓iPhone和Mac配對。 根據“核心藍牙編程指南”的頁面,要求配對連接的方法是外圍設備將特性的屬性和權限設置為適當的值。 我引用:

您可以通過設置適當的特性屬性和權限,確保只有受信任的設備才能訪問敏感的特征值。 要繼續上面的示例,要僅允許受信任的設備檢索成員的電子郵件地址,請設置相應的特性的屬性和權限,如下所示:

emailCharacteristic = [[CBMutableCharacteristic alloc]
    initWithType:emailCharacteristicUUID
    properties:CBCharacteristicPropertyRead
    | CBCharacteristicPropertyNotifyEncryptionRequired
    value:nil permissions:CBAttributePermissionsReadEncryptionRequired];

但是, 這不起作用。 即使我為特征設置了正確的權限和屬性,iPhone仍然可以讀取/寫入它而不顯示配對對話框。 在其他地方我被告知啟動配對的方法是外圍設備拒絕認證錯誤不足的讀/寫請求。 根據這篇文章,

要配對,您需要響應認證錯誤不足的寫入請求。 例如,對於iOS外圍設備,您可以編寫如下內容:

- (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests {
  ...

  [peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];

  ...
}

但這仍然不起作用! 當Mac拒絕認證錯誤的寫入請求時,iPhone會收到-[CBPeripheralDelegate peripheral:didWriteValueForCharacteristic:error:]回調,並顯示“身份驗證不足”的錯誤。 沒有配對對話框。 我不知道該怎么辦,如果我不能讓它工作,我正在考慮完全放棄Core Bluetooth。 如果您有任何想法如何工作,請告訴我。

來自Apple DTS:“我已經在這里與其他工程師進行了核實,我們不相信兩個iOS設備之間可以配對彈出,而是iOS設備和BLE外圍設備。”

因此,配對彈出窗口僅在iOS / Mac應用程序和外圍設備之間發生。 時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM