【发布时间】:2015-08-13 21:31:54
【问题描述】:
我的应用内购买有问题。离开 MasterViewController(列出并购买 IAP 项目)后,我来到 ViewController,它在 viewDidLoad 中检查购买的项目,但我也有一个 viewWillAppear 检查购买的项目并在加载 ViewController 时解锁这些购买的项目.
问题是,每次 ViewController 重新加载或刷新、离开然后返回时,viewWillAppear 都会检查购买的物品并再次解锁物品,在我的情况下,购买的物品来自 javascript 文件,这恰好发生在多次加载 JS,一遍又一遍地用相同的 IAP 项使应用程序混乱。
例如,如果您购买了“书签”,则每次重新加载 ViewController 时,您都会一遍又一遍地获得另一个“书签”工具。
我如何获得它以使 IAP 只加载一次?
我的 viewWillAppear 看起来像这样:
- (void)viewWillAppear:(BOOL)animated {
// Check To See If The Uniques IAP Has Been Paid For
if (![[[NSUserDefaults standardUserDefaults] objectForKey:SHOW_UNIQUES_KEY] isEqualToString: @"YES"]){ // NEW CODE
// Code to show bookmarks
} else {
NSString *jsString = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"Uniques" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil];
[viewWeb stringByEvaluatingJavaScriptFromString:jsString]; }
NSLog(@"Shows uniques?: %@", [[NSUserDefaults standardUserDefaults] objectForKey:SHOW_UNIQUES_KEY]);
// Check To See If The PL Numbers IAP Has Been Paid For
if (![[[NSUserDefaults standardUserDefaults] objectForKey:SHOW_PORTAL_LEVEL_KEY] isEqualToString: @"YES"]){ // NEW CODE
// Code to show bookmarks
} else {
NSString *jsString = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"PortalLevel" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil];
[viewWeb stringByEvaluatingJavaScriptFromString:jsString]; }
NSLog(@"Shows portal levels?: %@", [[NSUserDefaults standardUserDefaults] objectForKey:SHOW_PORTAL_LEVEL_KEY]);
// Check To See If The PN IAP Has Been Paid For
if (![[[NSUserDefaults standardUserDefaults] objectForKey:SHOW_PORTALS_KEY] isEqualToString: @"YES"]){ // NEW CODE
// Code to show bookmarks
} else {
NSString *jsString = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"PortalNames" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil];
[viewWeb stringByEvaluatingJavaScriptFromString:jsString]; }
NSLog(@"Shows portal names?: %@", [[NSUserDefaults standardUserDefaults] objectForKey:SHOW_PORTALS_KEY]);
// Check To See If The Bookmarks IAP Has Been Paid For
if (![[[NSUserDefaults standardUserDefaults] objectForKey:SHOW_BOOKMARKS_KEY] isEqualToString: @"YES"]){ // NEW CODE
// Code to show bookmarks
} else {
NSString *jsString = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"bookmarks" withExtension:@"js"] encoding:NSUTF8StringEncoding error:nil];
[viewWeb stringByEvaluatingJavaScriptFromString:jsString]; }
NSLog(@"Shows bookmarks?: %@", [[NSUserDefaults standardUserDefaults] objectForKey:SHOW_BOOKMARKS_KEY]);
// Check To See If The Poke A Bowl Ad Has Been Paid For
if (![[[NSUserDefaults standardUserDefaults] objectForKey:SHOW_ADS_KEY] isEqualToString: @"No"]){ // NEW CODE
// Code to show ads
_PokeABowlAd.hidden = NO;
} else {
_PokeABowlAd.hidden = YES;
}
NSLog(@"Shows ads?: %@", [[NSUserDefaults standardUserDefaults] objectForKey:SHOW_ADS_KEY]);
}
【问题讨论】:
-
您的代码是否显示书签(未显示)添加子视图 - 类似于:[self.view addSubview: something]?
-
我正在尝试解锁一个 JavaScript 文件。 JavaScript 文件是书签工具。唯一的问题是,每次加载或调用视图控制器时,都会再次调用 JavaScript 文件。它不断在我的视图控制器上加载多个书签工具。
-
表示 URLforResource 书签的 nss 字符串是 JS 文件。
-
从 MasterViewController 切换回 ViewController 时,我如何调用已保存的 IAP,而不是使用 ViewWillAppear,因为 ViewWillAppear 会调用超出需要的代码。
-
或者更好的问题是,如何在购买后立即解锁 IAP? :)
标签: ios objective-c in-app-purchase