Bluetooth LE を介して相互に通信する iPhone アプリケーションと Mac アプリケーションを開発しています。iPhone が中心で、Mac が周辺機器です。再起動後に iPhone アプリケーションが Mac アプリケーションに再接続できるようにしたいと考えています。そのため、Mac を表す周辺機器の UUID を NSUserDefaults に保存し、iPhone アプリの起動時に を呼び出し-[CBCentralManager retrievePeripheralsWithIdentifiers:]
て UUID を渡します。このメソッドは周辺機器を返しますが、 を呼び出す-[CBCentralManager connectPeripheral:options:]
と、iPhone は決して Mac に再接続しません。このSO 投稿によると、問題は、Mac の UUID が永続的になるように 2 つのデバイスをペアリングする必要があることです。これは私の問題につながります。私は一生、iPhoneとMacをペアリングすることができません。これによるとCore Bluetooth プログラミング ガイドのページでは、ペア接続を要求する方法は、周辺機器が特性のプロパティとアクセス許可を適切な値に設定することです。私は引用します:
適切な特性プロパティとアクセス許可を設定することで、信頼できるデバイスのみが機密性の高い特性値にアクセスできるようにすることができます。上記の例を続けて、信頼できるデバイスのみがメンバーの電子メール アドレスを取得できるようにするには、次のように、適切な特性のプロパティとアクセス許可を設定します。
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 を完全に削除することを検討しています。これを機能させる方法を知っている場合は、お知らせください。