その他
タグ:

iOS/Androidで端末を識別するIDまとめ

アイリッジでは様々なスマホ向けのサービスを開発していますが、その際にあると便利なのが端末を識別するIDです。
本日は端末を識別するIDについて、最新の動向をご紹介したいと思います。

 

iOS

UDID

端末を識別するIDと聞いて多くの方が真っ先に思い浮かべるのは、UDIDではないでしょうか。
UDIDは端末を一意に識別する強力なIDです。
しかし、複数のアプリ間で特定のユーザーを追跡可能で、ユーザーが自由にIDを変更することができないため現在は利用できません。

iOS5の時代にUDIDの取得が非推奨になり、iOS6の時代にUDIDを取得するアプリはAppStoreでの公開を拒否されるようになりました。
iOS7では、UDIDを取得すると “FFFFFFFF”+identifierForVendor(後述)が返されるようになっています。

MACアドレス

iOS5の時代にUDIDの取得が非推奨になったことをうけ、一部のアプリでは代わりにMACアドレス(またはMACアドレスをハッシュ化した文字列)が使われるようになりました。
これは、当時からUDIDの取得を非推奨にした趣旨を尊重しない行為(※1)として賛否両論でした。
そして2013年の中頃からMACアドレスを取得するアプリもAppStoreでの公開を拒否されるようになり、iOS7ではMACアドレスを取得すると固定値(20:00:00:00:00:00)が返されるようになりました。

※1 MACアドレスはUDIDと同様、複数のアプリ間で特定のユーザーを追跡可能で、ユーザーが自由に変更することができません。

 

identifierForVendor(IDFV)

UDIDに代わるIDとして、iOS6.0から使えるようになったIDです。
UDIDとは異なり、ベンダー(開発者)が異なるアプリでは異なるIDが返されます。
同じベンダーのアプリでは同じIDが返されますが、端末から同じベンダーのアプリがすべてアンインストールされると、次回インストール時には異なるIDが返されるようになります。

なお、identifierForVendorおよびAdvertisingIdentifier(後述)にはバグがあります。
ワイヤレスで(=iTunesを使わないで)iOS6.0にアップデートし、iOS6.0.1以上にアップデートしていない端末では固定値(00000000-0000-0000-0000-000000000000)が返ってきます。

AdvertisingIdentifier

こちらもUDIDに代わるIDとして、iOS6.0から使えるようになったIDです。
UDIDと同様、すべてのベンダーのアプリで同じIDが返されますが、ユーザーがiOSの設定画面からAdvertisingIdentifierを取得できないように設定することができます。
また、iOS6.1からは、ユーザーがAdvertisingIdentifierをリセットして新しいIDに更新できるようになりました。

その他の方法

UDIDの取得が非推奨になった後、複数のアプリ間で特定のユーザーを追跡するために様々な方法が考案されました。
例えばブラウザCookieにIDを記録する方法、OpenUDID、SecureUDID等ですが、いずれも現在は利用が推奨されません。

 

Android

デバイスID(IMEI/MEID/ESN)

携帯電話端末の個体識別番号です。
GSM端末ではIMEI、CDMA端末ではMEIDまたはESNを取得できます。
複数のアプリ間で同じ番号を取得可能で、ユーザーが自由に番号を変更することができないため、iOSのUDIDに近いイメージで利用できます。

しかしこれには2点、注意が必要です。
まず、デバイスIDを取得するにはアプリにREAD_PHONE_STATEのパーミッションが必要です。
次に、Wi-Fi専用端末のような携帯電話ではない端末ではデバイスIDを取得できないことです。
また、一部の端末ではデバイスIDを正常に取得できない場合があります。

iOSでUDIDの取得が非推奨になった趣旨を踏まえると、デバイスIDをUDIDのように使うことが望ましいかどうかについては議論が分かれるところです。


シリアル番号

Android2.3以上の携帯電話ではない端末では、端末のシリアル番号を取得できます。
携帯電話端末ではシリアル番号を取得できませんので(※2)、デバイスIDを補完して端末を識別するIDとしての利用が想定されます。

※2 一部の携帯電話端末ではシリアル番号を取得可能です。

 

MACアドレス

Wi-FiやBluetooth等のネットワークアダプタの物理アドレスです。
端末に該当のアダプタが搭載されていない場合、また、該当のアダプタが有効になっていない場合は、MACアドレスを取得できません。

 

ANDROID_ID

端末の初期化時にランダムに生成される文字列です。
複数のアプリ間で同じ値を取得できますが、異なる端末で異なる値が返ることが保証されているわけではありません。
Android 2.2未満では、正常に取得できない場合があります。
また、GALAXYSやDROID2(日本未発売)では、ANDROID_IDが固定値で返されるバグがありました。
 

AdvertisingID

GooglePlay開発者サービス4.0(※3)以上がインストールされている端末で利用できるIDです。
iOSのAdvertisingIdentifierと同様、複数のアプリ間で同じIDが返されます。
ですが、ユーザーがGoogle Play開発者サービスの設定画面からAdvertisingIDを取得できないように設定したり、AdvertisingIDをリセットして新しいIDに更新したりすることが可能です。

※3 GooglePlay開発者サービスは、一見開発者向けの機能のように見えますが、英語名はGooglePlayServicesで、AndroidOSの拡張機能をアプリ形式で提供するものです。
AndroidOSの機能により、各端末で自動的にインストール/アップデートされます。
GooglePlay開発者サービス4.0は、Android2.3以上の端末をサポートしています。

 

ID取扱い時の注意点

これらのIDが(法律上の)個人情報に該当するかどうかは議論が分かれるところですが、特にユーザーが自由に変更できないIDに関しては、個人情報と同等の取扱いが必要と言えます。
これらのIDと個人情報とがひも付いたデータベースがあれば、IDから容易に個人情報を追跡することが可能だからです。

また、MACアドレスを直接サーバーに送信する代わりに、MACアドレスのハッシュ値をサーバーに送信するということもよく行われますが、これについても注意が必要です。
MACアドレスは12桁の16進数の文字列(AA:BB:CC:DD:EE:FF)ですが、そのうちの6桁(AA:BB:CCの部分)はベンダーごとに固有の文字列です。
そのため、特定のベンダーに限って考えますと、MACアドレスは16の6乗で約1677万個しかありません。
これらのMACアドレスすべてについてあらかじめハッシュ値を計算しておくことで、ハッシュ値からMACアドレスを追跡することが可能になります。
このように、個数が少ない(=桁数が少ない)IDについては、ハッシュ化しても個人情報と結び付けることができてしまいますので、例えハッシュ値であっても個人情報と同等の取扱いが必要になります。

 

まとめ

iOS、Androidとも、異なるベンダーのアプリ間でユーザーを追跡したいケース(主に広告を想定)では、ユーザーが任意にオプトアウトできる(=IDを無効にしたり、更新したりできる)IDを利用させる方針ということが分かります。

一方、特定のアプリの中だけで端末を識別できればよい場合、iOSではidentifierForVendorを利用できそうですが、Androidでは単独で信頼して利用できるIDがありません。
そのため、複数のIDを組み合わせて利用したり、アプリ(サービス)側で独自にIDを発行したりする必要がありそうです。
 
P.S.
アイリッジではアプリマーケティングに役立つ情報を無料で公開しています!
詳しくは資料一覧ページをご覧ください!

TOP

事業・サービスに
関するお問い合わせ

サービスに関するご相談や
ご質問など、こちらからお問い合わせください。

03-6441-2441 03-6441-2441

受付時間月〜金 10:00〜18:00 ※祝日除く

CONTACT