web-dev-qa-db-ja.com

iOS7-デバイスの一意の識別子

IOSアプリケーションは特定のユーザー向けです。そのため、ユーザーの識別にはデバイス固有の識別子を使用しました。このアプローチは、毎回同じ値を取得しているため、iOS 6までうまく機能します。

NSString *strUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];

IOS 7では、上記の方法は異なる値を再調整しているため、ユーザー識別で問題が発生しています。 iOS 7 APIは、次の代替を提供します。

NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];

「uniqueIdentifier」を「identifierForVendor」に置き換え、アドホックビルドを作成しました。 iOS 7とiOS 6の両方のデバイスにビルドをインストールしました。 iOS 7では、これまでのところ、毎回同じ値を取得していますが、iOS 6ではアプリを削除して再インストールするたびに異なる値が表示されます。

現在、アプリケーションはApp Storeでは利用できません。そのため、このAPIがApp Storeビルドでどのように機能するかわかりません。

質問:1)アプリストアアプリの場合、「identifierForVendor」は毎回iOS 7で同じ値を返しますか?または、ユーザーが将来アプリを削除して再インストールすると変更される可能性がありますか? 2)iOS 7 APIの「一意の識別子」に利用できる他の代替手段はありますか。iOS6と7の両方で同じ値を返しますか? 3)その他の提案...

23
furqan kamani

3)その他の提案...

デバイスではなく、ユーザーを識別および承認するための戦略を検討する必要があります。デバイス固有の識別子に応じて、承認されたユーザーが何らかの管理者の介入なしにデバイスを切り替えることを防ぎ、承認されていないユーザーが承認されたデバイスを見つけた/盗んだ/借りる場合にアクセスすることを許可します。デバイス識別子の代わりにユーザー資格情報に依存することにより、これらの問題を回避できます。

5
Caleb

ドキュメントはこちら で見ることができます:

このプロパティの値は、同じデバイスで実行されている同じベンダーのアプリの場合と同じです。同じデバイス上の異なるベンダーのアプリと、ベンダーに関係なく異なるデバイスのアプリでは、異なる値が返されます。

このプロパティの値は、アプリがバックグラウンドで実行されている場合、ユーザーがデバイスを再起動した後に初めてデバイスのロックを解除する前にnilになる場合があります。値がnilの場合は、しばらく待ってから再度値を取得してください。

アプリ(または同じベンダーの別のアプリ)がiOSデバイスにインストールされている間、このプロパティの値は変わりません。ユーザーがそのベンダーのアプリをすべてデバイスから削除し、その後1つ以上のアプリを再インストールすると、値が変わります。したがって、アプリがこのプロパティの値をどこかに保存する場合、識別子が変更される状況を適切に処理する必要があります。

つまり、特定のベンダーの少なくとも1つのアプリがデバイスに残っている場合、特定のベンダーの識別子は同じままです。残っているアプリがなくなると(または単一のアプリの場合は再インストールされます)、識別子は変更可能になります。私の知る限り、iOS 6とiOS 7に違いはないはずです。したがって、あなたが見ている違いは偶然です。

29
Dima