アプリケーションで一意のIDを生成、取得する

AppleがiOSアプリケーションからUDID(機器固有ID)の取得を禁止したことにより、開発者の間でモバイル機器の認証に使用するIDをどのように生成、取得するが議論になったのは記憶に新しいが、ドメインやアプリケーションに対して一意なIDを生成、保存するか、更に強度を上げるには必要の都度IDを生成するのが一般的な考え方になっている。

そのような中、AndroidとiOS(iPhone)で同様の認証機構を実現したい場合は、どのような方法があるのだろう。

UUID(Universally Unique Identifier)

(OSF)が標準化した、16バイト長の識別子。Microsoftは古くからGUIDとして使っているが、Android、iOS共に標準APIが用意されており簡単に使える。

Android

UUID | Android Developers
単に取得するだけなら非常に簡単だ。

UUID.randomUUID().toString()
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で同様のことをするにはどうしたら良いだろう。