我已将应用内购买代码编入我的应用,但我想使用其他视图控制器根据用户是否购买该商品来显示内容
在我的ViewController中,我使用的是这个简单的IF语句,但它似乎没有用。还有什么我需要做的吗?
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if(![userDefaults boolForKey:@"productIdentifier"])
{
label.text = @"Purchased";
}
else {
label.text = @"Not Purchased";
}
我有另一个名为 IAPHelper.m 的文件,其中In App Purchase已编码,NSUSerDefaults中有一个方法,如下所示:
- (void)provideContentForProductIdentifier:(NSString *)productIdentifier {
[_purchasedProductIdentifiers addObject:productIdentifier];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:productIdentifier];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:IAPHelperProductPurchasedNotification object:productIdentifier userInfo:nil];
}
修改
如果有帮助,我的应用程序中有一个UITableView,可以根据用户是否进行购买来显示内容。控制它的语句是:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
SKProduct * product = (SKProduct *) [_products objectAtIndex:indexPath.row];
cell.textLabel.text = product.localizedTitle;
[_priceFormatter setLocale:product.priceLocale];
cell.detailTextLabel.text = [_priceFormatter stringFromNumber:product.price];
if ([[RageIAPHelper sharedInstance] productPurchased:product.productIdentifier]) {
labelPrice.text = @"Purchased";
} else {
labelPrice.text = @"Not Purchased";
}
return cell;
}
答案 0 :(得分:2)
@"productIdentifier"
是第一个代码块中的字符串文字,但productIdentifier
是第二个代码中的变量。
哈哈然后...... 编辑#3
它在您的表中工作的原因是因为您使用以下方法访问当前IAPHelper中的productPurchased
方法:
[[RageIAPHelper sharedInstance] productPurchased:product.productIdentifier];
同样,使用:
// Index should equal 0 if there's only one product…
SKProduct * product = (SKProduct *) [_products objectAtIndex:index];
if([[RageIAPHelper sharedInstance] productPurchased:product.productIdentifier]) {
label.text = @"Purchased";
} else {
label.text = @"Not Purchased";
}
答案 1 :(得分:0)
如果您想根据用户是否购买了IAP而转到其他视图,以下代码适用于基于Storyboard的应用。 (你从未指定过,所以我假设你正在使用它)
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
//self.productIdentifier needs to be defined with the productIdentifier to test.
if([userDefaults boolForKey:self.productIdentifier])// **Removed** the !. With a ! this would return that the user hasn't purchased it, when they did.
{
//User has purchased
[self performSegueWithIdentifier:@"purchasedView" sender:self];//You must set up a segue in the storyboard file first. (Control drag from files owner (orange box) onto the desired view. Then click on the new arrow. Then on the attributes inspector, name your segue id to "purchasedView"
}
else {
//User has not purchased IAP.
//Optionally stay on this view.
}
修改强> 新代码
int indexNumberOfProduct = 1;//Change to whatever you need
SKProduct * product = (SKProduct *) [_products objectAtIndex:indexNumberOfProduct];
if ([[RageIAPHelper sharedInstance] productPurchased:product.productIdentifier]) {
labelPrice.text = @"Purchased";
} else {
labelPrice.text = @"Not Purchased";
}
如果对您有帮助,请将此答案标记为正确。 感谢