2

ユーザー データを保存するために、iPhone/iPad モバイル デバイスを一意に識別しようとしています。

私はいくつかを見つけました。

[NSString *UUID = [[NSUUID UUID] UUIDString];
[UIDevice currentDevice].identifierForVendor.UUIDString;

またはデバイストークンを取得します

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{ ... }

しかし、問題は

  1. アプリを閉じて再起動するたびにUUIDが変更されます(デバッグから経験しました)
  2. アプリを削除して再インストールする (またはアプリを更新する) たびに、identiferForVendor が変更されます。
  3. デバイストークンを使用して、バージョンの更新、再インストールでデバイスを一意に識別しましたが、変更できることを知り、xCode での更新とデバッグからそれを経験しています。

app store は uniqueIdentifer を使用して拒否するので、私の質問は次のとおりです。アプリケーションの更新、削除、再インストールでデバイスを一意に識別する方法はありますか?

4

4 に答える 4

2

SSkeychain を使用して一意のキーを永続的に保存します。この github の例の sskeychain フォルダーから 4 つのファイルをプロジェクトに取り込みます。

その後、このコードを使用して一意の識別子を取得します。

-(NSString *)getUniqueDeviceIdentifierAsString
{

    NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];

    NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"incoding"];
    if (strApplicationUUID == nil)
    {
        strApplicationUUID  = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        [SSKeychain setPassword:strApplicationUUID forService:appName account:@"incoding"];
    }


    return strApplicationUUID;
}

この識別子は、アプリを削除して再インストールしても変更されません。私はこれを使用しましたが、私にとって完璧に機能しています。

于 2014-07-21T08:28:10.163 に答える
1

私が考えることができる最も近いことは、独自の UUID を生成し、それをデバイスのキーチェーンに保存することです。

これにより、アプリの削除/再インストールに耐え、ユーザーがiCloud キーチェーンを有効にしている場合は、デバイスの復元にも耐えられるはずです。

作業を簡単にするために、オープン ソースとして利用可能な多くのキーチェーン ラッパーを使用できます ( 1 つここにあります)。

于 2014-07-21T08:23:31.117 に答える
0

創造的な方法の 1 つは、wifi ポートのMAC アドレスを (ab) 使用することです。

于 2014-07-21T08:25:06.643 に答える