13

アプリが App Store から更新されるたびに、少数のユーザーが何らかの理由で新しいidentifierForVendorを取得します。ユーザーがサインアップまたはログインしません。それらはすべて匿名であるため、ベンダー ID で分ける必要があります。

一部のデバイスで容量が不足していて、アプリが削除されて再インストールされた可能性があると考えましたが、前回の更新で私の友人が 2GB を超える空き容量を持っていたため、そうではありませんでした。

アプリを削除して再インストールしたユーザーのidentifierForVendorが変更されることはわかっています。ただし、アプリが更新されたばかりなので、ここではそうではありません。

問題は何でしょうか?奇妙なことに、これは開発チームのデバイスではまだ起きていません。または、数え切れないほどのアプリの更新、OS の更新などを行った後も、このバグを経験していないユーザーがまだいます。これは、ごく一部のユーザーにのみ発生します。すべてのユーザーは iOS7 以降であり、さまざまなデバイス モデルと iOS バージョンで発生します。

このコードを使用して ID を取得します。

static let DeviceId = UIDevice.currentDevice().identifierForVendor.UUIDString

次に、それらを NSUserDefaults に保存します。

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "User" + DeviceId)
NSUserDefaults.standardUserDefaults().synchronize()

次に、新しいログインごとに、ユーザーが存在するかどうかを確認します。

static func doesUserExist() -> Bool {
    var userDefaultValue: AnyObject? = NSUserDefaults.standardUserDefaults().valueForKey("User" + DeviceId)

    if defaultValue == true {
        println("Userdefaults already has this guy, moving on")
        FirstTime = false
        return true
    } else {
        println("First time in the app!")
        FirstTime = true
        return false
    }
}

ユーザーが存在する場合は、ログイン プロセスを開始します。ユーザーが存在しない場合は、サインアップ プロセスが表示されます。Parse.com をバックエンドとして使用しており、deviceID をユーザー名として使用しています。その少数のユーザーがこのバグに遭遇すると、新しいユーザー名と新しいアカウントが作成されます。

4

3 に答える 3

7

5 月から 7 月の間にアプリ ストアからアプリを更新するときに、identifierForVendor の計算に影響するバグがありました。Apple は、すでに問題を解決したと主張しており、別のアップデートをプッシュすると、重要な日付の前に元の値が復元されるはずです. 参考:https ://openradar.appspot.com/22677034

一部のユーザーは、7 月以降の数週間の更新でもこの問題をまだ観察していることに注意してください。そのため、一部のバグがまだ残っている可能性や、将来いつでも再発する可能性があります。したがって、このデータを暗号化の一部として使用している場合は、これをキーチェーンに保存することをお勧めします。

于 2015-10-14T16:18:57.943 に答える
0

最初に IFV を NSUserDefaults に保存してから、そのキーが存在するかどうかを確認する理由がわかりません。私はあなたがすべきだと思います...

1) 最初に NSUserDefaults をチェックして、作成した IFV キーが存在するかどうかを確認します

2) NSUserDefaults キーが存在する場合、このユーザーのプロファイルは既に存在します。

3) キーが存在しない場合は、IFV を取得して NSUserDefaults に保存します。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

if ([defaults valueForKey:@"IFV"]) {
    //this user already exists, do what you need to do next with IFV
}

else{
    //this is their first time using the app
    NSString *ifvString = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    [defaults setValue:ifvString forKey:@"IFV"];

    //do what you need to do next with IFV
}
于 2015-10-28T03:12:46.790 に答える