7

私のアプリでは、ユーザーはCoreDataに保存されている消耗品(スーツケースなど)を購入します。ユーザーが最初にアプリをインストールするとき、私は彼らに開始するための景品を与えます。アプリは、少なくとも1つのスーツケースが設定されていないと機能しません。

しかし、ユーザーがアプリをiPhoneにインストールしてからiPadにインストールし、2つを同期すると、スーツケースが2つになります。また、いずれかのデバイスでアプリをアンインストールしてから再インストールして同期すると、追加のアプリが追加され、無期限に実行できます。

私は2つの解決策を見ることができますが、どれも正しくないようです。

  1. ユーザーが最初にiCloudと同期するときに、NSUbiquityKeyValueStoreに値を追加します。最初の起動時にこの値を確認してください。ゼロの場合は景品を作成し、そうでない場合はデータを同期します。しかし、これは問題を引き起こします。ユーザーが最初の起動時にiCloudを無効にするか、インターネットに接続していない場合はどうなりますか。アプリは景品を作成し、iCloudが利用可能になったら、複製を同期します。そうすれば、何度でもこれを行うことができます。

  2. どういうわけか、各アプリのデフォルトのアイテムと一致します。objectIDまたはタイムスタンプを一致させることを考えましたが、これらは異なるため、処理方法がわかりません。

誰かが私がこれについてできることを知っていますか?

編集:

あらかじめパッケージ化されたデータベースとmigratePersistentStore:toURL:options:withType:error:を使用するのが道のようです。それが私のために働くならば、コードで答えを投稿します。

4

3 に答える 3

3

領収書を検証しておらず、ユーザーが自分のサーバーで所有している消耗品を追跡していない場合は、間違っています。あなたは基本的にユーザーがまともで正直であることを信頼していますが、これは一般的に常に悪い考えです。

アプリ内消耗品を使用する場合は、ユーザーが購入したもののどこかにサーバーのログを記録しておく必要があります。これにより、アプリが起動するたびに、予想される数の消耗品が存在することをサーバーで確認できます。

于 2011-10-16T11:17:03.717 に答える
1

iCloudの使用はネットワーク接続を意味します。デバイスがネットワークに接続するとすぐに、自分のサーバーでの消耗品のレシートとログ消費を検証できます。

于 2011-10-16T07:37:04.807 に答える
0

私の意見では、これに対する最善の解決策は、UDIDをiCloudUbiquitousKeyValueStoreの配列に格納することです。

//Store UDID in iCloud
if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 5.0) {
    if ([[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]) {
        NSUbiquitousKeyValueStore *store = [NSUbiquitousKeyValueStore defaultStore];

        //Get array
        NSMutableArray *devices = [NSMutableArray arrayWithArray:[store arrayForKey:@"UDID"]];
        [devices addObject:[[UIDevice currentDevice] uniqueIdentifier]];

        //Create new array, set to kvstore
        NSArray *newDevices = [NSArray arrayWithArray:devices];
        [store setArray:newDevices forKey:@"UDID"];
        [store synchronize];
    }
}

..。

   //Check if app already installed on device
   NSArray *devices = [[NSUbiquitousKeyValueStore defaultStore] arrayForKey:@"UDID"];

    for (NSString *UDID in devices) {
        if ([UDID isEqualToString:[[UIDevice currentDevice] uniqueIdentifier]]) {
              //stop the giveaway
        }
    }
于 2011-11-23T06:25:59.963 に答える