つい最近明らかになったのは、UIDevice uniqueIdentifierプロパティは非推奨ですiOS 5ではサポートされ、iOS 7 以降では使用できません。代替の方法やプロパティは提供されていないか、今後提供される予定はありません。
既存のアプリの多くは、特定のデバイスを一意に識別するためにこのプロパティに大きく依存しています。今後この問題をどのように処理すればよいでしょうか?
からの提案2011-2012年の文書だった:
特別な考慮事項
uniqueIdentifier プロパティは使用しないでください。アプリ固有の一意の識別子を作成するには、
CFUUIDCreate
関数を呼び出して を作成しUUID
、 クラスを使用してそれを defaults データベースに書き込むことができますNSUserDefaults
。
ただし、ユーザーがアプリをアンインストールして再インストールした場合、この値は同じにはなりません。
ベストアンサー1
によって作成された UUID は、ユーザーがアプリをアンインストールして再インストールした場合でも一意であり、そのたびに新しい UUID が取得されますCFUUIDCreate
。
しかし、一意ではない
、
つまりユーザーがアプリをアンインストールして再インストールしても変わらないようにしたい場合もあるでしょう。これには少し手間がかかります。なぜなら、最も信頼できるデバイスごとの識別子はMACアドレスのようです。
MACを照会する
それを UUID として使用します。
編集:
もちろん、常に同じインターフェースの MAC を照会する必要があります。 を使用するのが最善だと思います
en0
。 インターフェースに IP がない場合やダウンしている場合でも、MAC は常に存在します。
編集2:他の人が指摘したように、iOS 6以降の推奨される解決策は-[ベンダーのUIデバイス識別子]ほとんどの場合、古いものの代替としてこれを使用できるはずです-[UIDevice uniqueIdentifier]
(ただし、アプリを初めて起動したときに作成される UUID は、Apple が使用することを望んでいるようです)。
編集 3:
この重要なポイントがコメントの雑音に埋もれないように、
MAC を
UUID として使用せず、
MAC を使用してハッシュ
を作成してください。そのハッシュは、再インストールやアプリ間でも常に同じ結果を生成します (ハッシュが同じ方法で実行されている場合)。とにかく、今日 (2013 年) では、iOS < 6.0 で「安定した」デバイス識別子が必要な場合を除いて、これはもう必要ありません。
編集4: iOS 7では、AppleはMACを照会する際に常に固定値を返すようになり、IDスキームのベースとしてMACを特に阻止するようになりました。そのため、-[ベンダーのUIデバイス識別子]またはインストールごとに UUID を作成します。