53

私は現在、Bluetooth Low Energy デバイスに基づく iOS アプリケーションに取り組んでいます。取得した周辺機器を比較するための一意の識別子を取得するには、周辺機器の MAC アドレスを取得する必要があります。

周辺機器の UUID プロパティは iOS デバイスによって異なり、周辺機器が UUID を取得するには、少なくとも 1 回はマスター デバイスに接続する必要があります。チェックインを処理する必要があるため、接続を確立したくありません。bluetooth サービス ポータルを調べたところ、デバイス情報自体がサービスであり、マスター iOS デバイスと周辺の bluetooth low energy デバイスの間で接続が確立されていないと取得できないことがわかりました。

Android では、デバイス自体をスキャンしてデバイスから応答を取得するときに、MAC アドレス (getAddress() を使用) を含むデバイスのすべての情報を取得することがわかりました。

デバイス アドレスに関連する CBPeripheral クラスのプロパティが見つかりませんでした。一意のパラメーターを取得する別の方法は、広告データをカスタマイズして、デバイスに関する追加情報を送信することです。これには、ファームウェア側でより多くの作業が必要です。

iOSで、接続を確立せずにBluetooth Low Energy周辺機器のMACアドレスを取得できる方法はありますか?

どんな助けでも大歓迎です。

4

5 に答える 5

30

CBPeripheral の identifier プロパティは目的を果たし、CBCentralManager の didDiscoverPeripheral デリゲート メソッドでまだ接続されていないデバイスから利用できます。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

CBPeripheral *peripheral ...

NSUUID* serverId = [peripheral identifier];

私は実験中の LE デバイスを 6 台持っており、その中には同一のデバイスの複数のセットが含まれています。2 つの iOS デバイス間で、これらすべての LE ウィジェットの識別子が異なることを確認しましたが、各 iOS デバイスでは、各ウィジェットの識別子は、アプリケーションの起動後も、アプリの削除と再インストール後も保持されていました。これは、OS が十分な情報を内部に保存していることを明確に証明していると言えます。これにより、特定の iThing について、実際に接続しなくても、アプリが遭遇するすべての周辺機器を区別して再識別できるようになります。またadvertisementData、接続前にも利用できる は CBAdvertisementDataLocalNameKeyCBAdvertisementDataManufacturerDataKeyCBAdvertisementDataServiceUUIDsKey、 、 などの有用な情報でいっぱいですCBAdvertisementDataSolicitedServiceUUIDsKeyが、[周辺機器識別子] ほどデバイスを一意に識別する確実なものはありません。

UUID が保持されていることを証明するためにデバイスのバックアップと復元を試みませんでしたが、保持されていることは間違いありません。

于 2013-11-20T05:06:53.113 に答える
15

更新された回答:-

iOS 12 以降は UDID を取得できます

   print(UIDevice.current.identifierForVendor)

   print(UIDevice.current.identifierForVendor?.uuidString)

iOS 12 より前**

この情報を取得するためのパブリック API はありません。

これが内部またはジェイルブレイク アプリケーションの場合、liblockdown.dylib を介して kLockdownBluetoothAddressKey キーの値を取得できます

于 2013-09-24T04:56:03.927 に答える
12

低エネルギーの周辺機器は、MAC アドレスを隠すプライバシー機能を使用する場合があるため、接続またはボンディングの前にアドレスを取得することさえ可能であるとは限りません。どうにかして無線で送信される MAC アドレスを取得した場合、プライバシーを処理する必要があるか、相互運用性の問題が発生します。

Apple は UUID を使用してこれらのプライバシー機能を抽象化しているため、ユーザーはそれらについて心配する必要がありません。

あなたが書いたようにそれを行う正しい方法は、ベンダー固有のデータを広告パケットに追加するか、デバイス情報サービスを使用することです。

于 2013-09-24T08:23:51.473 に答える