web-dev-qa-db-ja.com

インストールまたはアップグレードされたiOSアプリを検出する方法は?

アプリケーションを開発していますが、ユーザーがアプリを初めてインストールしたのか、AppStoreからアップグレードしたのかを知る必要があります。

アプリが初めてインストールされたか、アップグレードまたは再インストールされたかをどのように検出できますか?

よろしくお願いします。

23
Hamza Öztürk

アプリのインストール後の最初の起動、更新後の最初の起動、その他の起動は、最新の既知のバージョンを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];
}
35
Nero

チェックアウト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()
}
11
Saggy

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()
3
sohail059

(可能性のある)新規インストールとその後の更新を確認するために、バージョンをNSUserDefaults(@ Neroの回答による)に保存してください。

再インストールの確認用(保存されている場合はversion == nil)、iOS 11の DeviceCheck APIの導入を活用します。これは、アプリで設定および取得できるが、Appleおよびアンインストール/再インストール後も持続しました。

0
Tom Howard

注:

キーのローカライズされた値を取得するには、CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle(), "CFBundleShortVersionString" as CFString)を使用する必要があります

0
akaDuality