10

重複の可能性:
UIDevice uniqueIdentifier非推奨-今何をすべきか?

ご承知のとおり、iOS5ではuniqueIdentifierinは非推奨になりました。UIDevice私が探しているのは、iOS5と基本的に同じ機能です。

ドキュメントから私が理解していることは、アップルは私たち(開発者)が(CFUUIDCreate私が推測するように)独自のUUIDを作成し、それをに保存することを望んでいるということですNSUserDefaults。しかし、これは私を少し震えさせ、まったく救いを感じません。この場合、UUIDがあるのは少し無意味だと感じます。

UUIDが必要な理由は、認証プロセスでUUIDを含む一連の情報をサーバーに送信し、サーバーが次にアプリを起動したときにユーザーが誰であるかを「推測」できる場合は、いくつかの手順をスキップできるようにするためです。または再インストールするか、別のアプリが私のライブラリを実装します。CFUUIDCreateこれで私を助けていないようです。

gekitzもざっと見てみましたが、理解しているように、電話のイーサネット「カード」のMACアドレスのみに基づいています。MACアドレスが変更可能だと漠然と感じているので、これは適切ではありません。uniqueIdentifierでしUIDeviceた_

さまざまなハードウェアの詳細に基づいて、各デバイスに固有の英数字の文字列。

現在、UUIDを取得するこのコードを作成しました。しかし、XCodeでクリーンアップして電話にアプリを再インストールするとすぐに、新しいUUIDが取得されます。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *UUID = @"";

if (![defaults valueForKey:@"UUID"])
{
    CFUUIDRef UUIDRef = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef UUIDSRef = CFUUIDCreateString(kCFAllocatorDefault, UUIDRef);
    UUID = [NSString stringWithFormat:@"%@", UUIDSRef];

    [defaults setObject:UUID forKey:@"UUID"];
}
else {
    UUID = [defaults valueForKey:@"UUID"];
}

[deviceInformation setObject:UUID forKey:@"UUID"];

要約すると、私の質問は次のとおり
です。改ざんが「困難」で、受信者として私に信頼できる信頼できるデバイスを提供するデバイスに基づくUUIDを作成する確実な方法はありますか?これはデバイスに基づく必要はありません。再インストール後も同じである限り、アプリのUUIDとしてアプリに基づくことができます。

4

1 に答える 1

7

これまでのところ、MACはデバイスを識別するための唯一の既知の「安定した」方法のようです。

エリカ・サドゥンのUIDevice(Hardware)カテゴリーを見てください。識別に役立つのはMACだけです。

彼女はまた、UIDevice(IOKit_Extensions)IMEIとシリアル番号を提供するカテゴリを持っています。ただし、IOKitはプライベートAPIです。エリカは書いた

iPhoneのエバンジェリストであるMattDranceがツイートしたように、「IOKitはiPhoneで公開されていません。ヘッダーとドキュメントが不足していることは、見落としがちです。」

したがって、使用IOKitすると拒否される可能性があります。

私の知る限り、ユーザーがデバイスをジェイルブレイクせずにMACを変更する方法はありません(そして、とにかく彼はやりたいことを何でもできます)。したがって、私の提案は、ジェイルブレーカーを無視し、MACに基づくUUIDを使用することです。

警告!MACアドレスAPIはiOS7では機能しません。

于 2011-10-18T08:44:18.243 に答える