#背景
スマホが発信するBluetoothを検知すればICカードとか使わないで入退室通知ができるんじゃないかと思ったので色々調べてた
#iosはペアリングするまでランダムなMACアドレスを送信する
らしいです。
参照:https://www.quora.com/Do-Bluetooth-devices-have-a-persistent-ID-like-a-MAC-address
実際 BluetoothLEAdvertisementReceivedEventArgs を使用して BluetoothAddress を取得してみましたが、iPhone の Bluetooth をオンにした時に検出されるアドレスは、毎回ランダムな2つの BluetoothAddress と数分置きにランダムになる一つの BluetoothAddress (こいつはUUIDを持ってた。UUIDも数分置きに一緒に変わる) でした。
ちなみに検索履歴の彼方に行ってしまってどこで見かけたかは分かりませんが、以下のコードで BluetoothLEAdvertisementReceivedEventArgs.BluetoothAddress からMACアドレスを取得できました。
private void hoge(BluetoothLEAdvertisementReceivedEventArgs args)
{
string macAddres = string.Join(":", BitConverter.GetBytes(args.BluetoothAddress).Reverse().Select(x => x.ToString("X2"))).Substring(6);
}
#iosアプリから制作するなら、BluetoothでiPhoneを識別できるのかも
2014.04.03 マーケティングブログ iOS/Androidで端末を識別するIDまとめ https://iridge.jp/blog/201404/4836/
によると、どうやら簡単に端末を追跡できるものはセキュリティ的によろしくない、という流れがあったようです。
iosにも、UDID、MACアドレス、など端末を識別するIDはありますが、2014年の時点でUDID、MACアドレスは既に自由に使用できなくなり、代わりにアプリで使用できる identifierForVendor(IDFV)、AdvertisingIdentifier が提供されたとあります。
僕がやりたかったBluetoothでiPhoneを識別して入退室管理、もアプリ制作から取り組めばできるのかもしれません。
#おわりに
僕はアンドロイドは持ってないのでアンドロイドで検証はしていませんが、少なくとも iPhone をペアリングなし Bluetooth で識別するのは無理っぽい。無念
もしペアリングなし Bluetooth で iPhone を識別する方法を知っているという方がいたら、コメントしてくださると嬉しいです。