アプリケーションを開発していますが、ユーザーがアプリを初めてインストールしたのか、AppStoreからアップグレードしたのかを知る必要があります。
アプリが初めてインストールされたか、アップグレードまたは再インストールされたかをどのように検出できますか?
よろしくお願いします。
アプリのインストール後の最初の起動、更新後の最初の起動、その他の起動は、最新の既知のバージョンをstandardUserDefaults
に保存することで非常に簡単に区別できます。しかし、私が知る限り、アプリがデバイスから削除されると、アプリに関連するすべてのデータも削除されるため、アプリの再インストールを検出することはできません。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString* currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
NSString* versionOfLastRun = [[NSUserDefaults standardUserDefaults] objectForKey:@"VersionOfLastRun"];
if (versionOfLastRun == nil) {
// First start after installing the app
} else if (![versionOfLastRun isEqual:currentVersion]) {
// App was updated since last run
} else {
// nothing changed
}
[[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"VersionOfLastRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
チェックアウトSwift 3.0バージョンのコード。
注:実際のアプリのバージョンチェックには、CFBundleShortVersionStringを使用してください。
func checkAppUpgrade() {
let currentVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
let versionOfLastRun = UserDefaults.standard.object(forKey: "VersionOfLastRun") as? String
if versionOfLastRun == nil {
// First start after installing the app
} else if versionOfLastRun != currentVersion {
// App was updated since last run
} else {
// nothing changed
}
UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun")
UserDefaults.standard.synchronize()
}
Swift 3
let currentVersion : String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
let versionOfLastRun: String? = UserDefaults.standard.object(forKey: "VersionOfLastRun") as? String
if versionOfLastRun == nil {
// First start after installing the app
} else if !(versionOfLastRun?.isEqual(currentVersion))! {
// App is updated
}
UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun")
UserDefaults.standard.synchronize()
(可能性のある)新規インストールとその後の更新を確認するために、バージョンをNSUserDefaults
(@ Neroの回答による)に保存してください。
再インストールの確認用(保存されている場合はversion == nil
)、iOS 11の DeviceCheck APIの導入を活用します。これは、アプリで設定および取得できるが、Appleおよびアンインストール/再インストール後も持続しました。
注:
キーのローカライズされた値を取得するには、CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)
を使用する必要があります