アプリが 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 をユーザー名として使用しています。その少数のユーザーがこのバグに遭遇すると、新しいユーザー名と新しいアカウントが作成されます。