Покупка в приложении: SKPaymentTransactionStatePurchased

#ios #in-app-purchase

#iOS #покупка в приложении

Вопрос:

Я только что добавил одну покупку в приложении в свое приложение. Когда пользователь нажимает на кнопку «Покупка» и транзакция завершается, кнопка «покупка» заменяется другой кнопкой для доступа к новым функциям. Но каждый раз, когда я возвращаюсь на эту страницу или закрываю и снова открываю приложение, снова появляется кнопка «Купить». Как я могу сделать, чтобы всегда иметь новую кнопку, если пользователь приобрел новое содержимое? Вот мой код:

 -(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];


          }

     }

}
  

Ответ №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
  

Ответ №2:

Вы должны справиться с этим самостоятельно, StoreKit вам в этом не поможет.

Например, как только ваша покупка будет завершена, сохраните некоторое значение в Userdefaults, чтобы помнить, что покупка уже была совершена. В вашем методе viewDidLoad viewDidLoad ViewControllers просто проверьте наличие этого значения, а затем позвольте ему отображать / скрывать соответствующие кнопки.

Ответ №3:

Вы должны сохранить это состояние в пользовательских настройках. Просто добавьте что-то подобное в регистр SKPaymentTransactionStatePurchased:

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

И после повторного запуска вашего приложения вы должны проверить этот параметр и сгенерировать соответствующую кнопку.