在App Purchase中:SKPaymentTransactionStatePurchased

时间:2011-11-07 12:40:35

标签: ios in-app-purchase

我刚刚在我的应用中添加了一个应用内购买。 当用户点击“购买”按钮并且交易结束时,“购买”按钮被另一个按钮替换以访问新功能。 但每当我回到那个页面或者我再次关闭并打开应用程序时,再次出现“购买”按钮。 如果用户购买了新内容,如何始终使用新按钮? 这是我的代码:

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {

    for (SKPaymentTransaction *transaction in transactions) {

          switch (transaction.transactionState) {

               case SKPaymentTransactionStatePurchasing:

                    break;

               case SKPaymentTransactionStatePurchased:

               [[SKPaymentQueue defaultQueue] finishTransaction:transaction];

                           UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];

                              [button addTarget:self 

                               action:@selector(myaction)

                               forControlEvents:UIControlEventTouchUpInside];

                    [button setTitle:@"mytitle" forState:UIControlStateNormal];



                    button.frame = CGRectMake(156.0, 248.0, 129.0, 36.0);

                    [self.view addSubview:button];

                    break;

               case SKPaymentTransactionStateRestored:

                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
                         break;

               case SKPaymentTransactionStateFailed:

                    if (transaction.error.code != SKErrorPaymentCancelled) {

                         NSLog(@"Errorr");

                    }

                    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];


          }

     }

}

3 个答案:

答案 0 :(得分:1)

你需要自己处理,StoreKit不会帮你解决这个问题。

例如,一旦您的购买完成,请将一些值保存到Userdefaults以记住已经购买。在ViewControllers viewDidLoad方法中,只检查是否存在该值,然后让它显示/隐藏相应的按钮。

答案 1 :(得分:1)

您必须将此状态保存到用户首选项。只需在SKPaymentTransactionStatePurchased案例中添加类似的内容:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setBool:YES forKey:transaction.originalTransaction.payment.productIdentifier];
    [prefs synchronize];

重新启动应用后,您必须检查此设置并生成正确的按钮。

答案 2 :(得分:1)

您应该保存有关用户购买内容这一事实的信息。

有很多方法可以做到这一点。例如,您可以使用NSUserDefaults

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int version = [defaults integerForKey:@"db_version"];                 // <- read int value from defaults
[defaults setValue:[NSNumber numberWithInt:2] forKey:@"db_version"];  // <- set int value
[defaults synchronize];    // <- save changes