2012年12月23日

UUIDを使う

前項で自分の端末を識別するためには電話番号を使うのではなくUUIDを使うのがよいと述べた。端末毎にあらかじめ設定されているIDをUDID(Unique Deveive Identifier)という。だがこれは複数のアプリケーションで共通して使うことで個人情報を収集できるような問題点が指摘されているし、それとは別に端末の所有者が変わっても前の持ち主と同一の情報にアクセスできてしまうような問題もあるとして使用が問題視されている。よってこれは使わない方がよい。

iOSでは以下のようにしてUDIDが取得できるが、このほうほうはiOS5.0から非推奨となっていてiOS6.0では未だ使用できているがいずれ使えなくなるだろう。
    NSString    *uniqueID = [[UIDevice currentDevice] uniqueIdentifier];


その変わりに使用が推奨されているのがUUID(Universally Unique Identifier)である。これは非常に長い文字列で克つランダムに生成されるので、全世界で同じ物が生じる可能性が極めてゼロに近いとされている。このためこれをUDIDのように使うことで他の人と同じではない全世界でユニークなIDとして使えるのである。端末の所有者が変わった場合にはアプリケーションなどもいったんリセットされるので、そこで新たにUUIDを生成すると前とは違ったものになるので、同じ端末なら所有者が変わっても不変というUDIDの問題も生じない。

iOSでUUIDを生成するのはCore Foundationの関数を使う。生成後にはNSString文字列に変換する必要がある。この関数はiOS2.0以降で利用できる(Mac OS Xでも10.0以降で使える)。

    CFUUIDRef   uuid = CFUUIDCreate(NULL);
NSString *uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);


この関数は呼び出すたびに違うIDを生成するので、自分を識別する目的で使うためには保存しておく必要がある。サンプルアプリケーションではNSUserDefaultsを介して設定ファイルに保存している。

ただし、そのIDひとつでサーバー上のデータにアクセスするかどうかを識別するために使うことが多いためデータ保護するためにキーチェーンに保存したほうがよいという考え方もある。キーチェーンに保存すればアプリケーションをなんらかの理由で削除した場合でも、再インストールすれば以前と同じIDで使うことができるというメリットもありこちらの方が主流のようだ。

キーチェーンに保存する方法は以下のブログがわかりやすいので参考にしてほしい
http://www.bitz.co.jp/weblog/?date=20120808

Xcode 4.5.2 & ARC ON & Deployment Target iOS5
サンプルアプリケーション
ラベル:Core Foundation
posted by 永遠製作所 at 15:06| 東京 ☁| Comment(0) | TrackBack(0) | iPhone/iPod touch | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。