なんかイロイロあって調べてた。Unity で固有のIDを扱う際に Systeminfo.deviceUniqueIdentifier というのを使用するとソレっぽい値を取得できるのだけど、利用用途によっては罠にハマる。
Unity - Scripting API: SystemInfo.deviceUniqueIdentifierこの値は Unity のバージョン及び iOS のバージョン, 更には Android の端末毎に参照先の値が異なってくる。が、どうせ最新版しか使わないので現在のバージョンである 4.5 で取得できる値について記述すると以下のようになる。
OS | 取得元の値 |
---|---|
iOS7 | advertisingIdentifier もしくは Vendor ID |
iOS6 | Mac Address |
Android | IMEI / MEID、ANDROID_ID or WiFi MAC Address |
ここで様々な問題が出てくる。
iOS
iOS は IMEI ダメになったり UDID ダメになったり Mac アドレスダメになったりしたけど個人情報保護の為だ。
iOS の Vendor ID
identifierForVendor の事。iOS でベンダー毎に割り当てられる固有の番号で、同一ベンダーのアプリがインストールされていれば同じ値を取得できる。が、同一ベンダーのアプリを全て削除し、再度インストールすると値が変わってしまう。
iOS 7時代のUDID(UUID)取得方法 - 強火で進めなので再インストールした際に同一デバイスであるかの判別を行う、などはできない。
Android
相変わらず Android では IMEI も Mac Address も取得できるようだ。パーミッション表示すれば良いという事なんだろうか。それはともかく気をつけないと変な値を掴む事になる。
IMEI
当たり前だがタブレットなどでは取得できない。
Android ID
Android 端末をセットアップした際に生成されるユニークな値。ファクトリーリセットされたら変わる。Android4.2以上で複数ユーザで利用する場合もユーザ毎に違う値が設定される。
Settings.Secure | Android Developers
そしてある機種では全ての端末で同一の Android_ID を返す。ググって出てきたのが Galaxy S と Droid2 なので確認はできないが, そういう事もあるらしい。
Galaxy-S でANDROID_IDが全機種同じ - Google グループ
さらにいうと Android 2.2 まではバグがあったらしい。今どき 2.2 対応しないだろうから良いとは思いますが。
なので SystemInfo.deviceUniqueIdentifier を使うぐらいなら最初から Mac アドレスを取得しにいったほうが良いと思う。