Как вернуться из метода определения пользователя в метод делегирования

#ios #iphone #in-app-purchase #nsarray

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

Вопрос:

Я реализую покупку в приложении. И у меня возникла проблема при выполнении методов делегирования store kit.

Вот мой код следующим образом:

 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {

    NSLog(@"Received products results...");   
    NSLog(@"response.products.......%@",response.products);
    self.products = response.products;
    self.request = nil;    

     proUpgradeProduct = [_products count] == 1 ? [[_products objectAtIndex:0] retain] : nil;

     if (proUpgradeProduct)
     {
     NSLog(@"Product title: %@" , proUpgradeProduct.localizedTitle);
     NSLog(@"Product description: %@" , proUpgradeProduct.localizedDescription);
     NSLog(@"Product price: %@" , proUpgradeProduct.price);
     NSLog(@"Product id: %@" , proUpgradeProduct.productIdentifier);
     }

     NSLog(@"products.....%@",_products);

     for (NSString *invalidProductId in response.invalidProductIdentifiers)
     {
     NSLog(@"Invalid product id: %@" , invalidProductId);
     }


    [[NSNotificationCenter defaultCenter] postNotificationName:kProductsLoadedNotification object:_products];    

    [self buyProductIdentifier:proUpgradeProduct.productIdentifier];

}


- (void)buyProductIdentifier:(NSString *)productIdentifier {
    if ([SKPaymentQueue canMakePayments])
    {
    NSLog(@"Buying %@...", productIdentifier);

    SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier];
   [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"StoreKit" message:@"You are not authorised to purchase from AppStore"
                                                       delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];
        [alert release];
    }

}

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                [self restoreTransaction:transaction];
            default:
                break;
        }
    }
}
  

Управление не переключается на - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions in (void)buyProductIdentifier:(NSString *)productIdentifier — method.

Что мне делать?

Ответ №1:

  1. Вы должны установить SKPaymentTransactionObserver defaultQueue :

    [[SKPaymentQueue defaultQueue] addTransactionObserver:manager];

  2. Метод paymentQueue:updatedTransactions: будет вызван только после StoreKit завершения работы с транзакциями в вашем defaultQueue : когда пользователь отменил или купил (или транзакция была восстановлена) продукт.

Комментарии:

1. где я должен написать [[SKPaymentQueue defaultQueue] addTransactionObserver:self];? я написал это в (void)buyProductIdentifier:(NSString *)ProductIdentifier

2. здесь я сталкиваюсь с проблемой, что когда я нажимаю на третью кнопку оплаты, я вызываюсь четырьмя методами..