nat*_*ate 7 iphone objective-c in-app-purchase icloud
在我的应用程序中,用户购买存储在Core Data中的消耗品,比如手提箱.当用户首次安装应用程序时,我会给他们一个免费的入门.如果没有至少一个行李箱设置,该应用程序将无法运行.
但是,如果用户在他们的iPhone上安装应用程序,然后安装他们的iPad并同步这两个,他们现在有2个手提箱.如果他们在任一设备上卸载应用程序,然后重新安装并同步它们,他们只是获得了额外的一个,他们可以无限期地执行此操作.
我可以看到两个解决方案,但它们似乎都没有:
当用户首次与iCloud同步时,向NSUbiquityKeyValueStore添加值.首次启动时检查此值.如果它是零,则创建免费赠品,如果不是,则同步数据.但这会产生问题.如果用户在首次启动时禁用iCloud或没有互联网连接,该怎么办?该应用程序将创建免费赠品,然后当iCloud可用时,同步副本,他们可以根据自己的喜好多次执行此操作.
以某种方式匹配每个应用程序上的默认项目.我有想法匹配objectIDs或时间戳,但这些会有所不同,我不知道如何处理它.
有谁知道我能做些什么吗?
编辑:
使用预先打包的数据库加上migratePersistentStore:toURL:options:withType:error:似乎是要走的路.如果它适用于我,将用代码发布答案.
在我看来,最好的解决方案是将 UDID 存储在 iCloud UbiquitousKeyValueStore 的数组中。
//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];
}
}
Run Code Online (Sandbox Code Playgroud)
...
//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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1652 次 |
| 最近记录: |