アプリケーションで一意のIDを生成、取得する
AppleがiOSアプリケーションからUDID(機器固有ID)の取得を禁止したことにより、開発者の間でモバイル機器の認証に使用するIDをどのように生成、取得するが議論になったのは記憶に新しいが、ドメインやアプリケーションに対して一意なIDを生成、保存するか、更に強度を上げるには必要の都度IDを生成するのが一般的な考え方になっている。
そのような中、AndroidとiOS(iPhone)で同様の認証機構を実現したい場合は、どのような方法があるのだろう。
UUID(Universally Unique Identifier)
(OSF)が標準化した、16バイト長の識別子。Microsoftは古くからGUIDとして使っているが、Android、iOS共に標準APIが用意されており簡単に使える。
iOS
CFUUID Reference - Mac OS X Developer Library
Androidのように一文でという訳にはいかず、Core Foundationのイディオムを使う必要がある。
- (NSString*)createUUID { // UUIDの生成 CFUUIDRef uuidObject = CFUUIDCreate(kCFAllocatorDefault); //文字列に変換 NSString *uuidStr = (NSString*)CFUUIDCreateString(kCFAllocatorDefault, uuidObject); //リリース CFRelease(uuidObject); return uuidStr; }
iOSには"Keychain Services"という仕組みがあり、生成されたUUIDを内部のキーチェーンに保存することができる。
Keychain Services
この仕組みを使うことでアプリケーション毎のIDを実現することができるのだが、Androidで同様のことをするにはどうしたら良いだろう。