Ошибка Apple Store в приложении StoreKit - PullRequest
4 голосов
/ 03 ноября 2010

Я реализую функцию покупки в приложении для книжной полки, но во время покупки книг СЛУЧАЙНО появляется сообщение об ошибке.

Сообщение об ошибке: «Запросы на оплату ограничены продуктами, возвращенными как действительные через метод didReceiveResponse Store Kit».

Я нахожу документ в яблоке http://developer.apple.com/library/ios/#qa/qa2010/qa1691.html, но это не помогает решить проблему ...

, в то же время наблюдатель выводит еще одну ошибку: "Не могуподключиться к iTunes Store ".

мой логический процесс покупки приложения:

ЗАПУСК ПРИЛОЖЕНИЯ:

- (void) requestProductDataWithSet:(NSSet*)_set
{
 SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: _set];
 request.delegate = self;
 [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    //setup UI here
}

ПОКУПКА:

- (void) purchase:(SKProduct *)product
{
 if (!product || !verified) {
  return;
 }

 SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:product.productIdentifier]];
 request.delegate = self;
 [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
if ([SKPaymentQueue canMakePayments] && [response.products count] > 0)
{
    NSLogInfo(@"xxxxxxxxx Make payment xxxxxxxxx");
    SKPayment *payment = [SKPayment paymentWithProduct:[response.products objectAtIndex:0]];
    [[SKPaymentQueue defaultQueue] addPayment:payment];   
  }
  else
  {
   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Purchase" message:@"You are not authorized 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)
 {
  NSLogInfo(@"updatedTransactions transactionState:%d, productIdentifier:%@",transaction.transactionState,transaction.payment.productIdentifier);
  switch (transaction.transactionState)
  {
   case SKPaymentTransactionStatePurchased:

                [self completeTransaction:transaction];

                break;

            case SKPaymentTransactionStateFailed:

                [self failedTransaction:transaction];

                break;

            case SKPaymentTransactionStateRestored:

                [self restoreTransaction:transaction];

            default:

                break;
  }   
 }
}

Ответы [ 2 ]

2 голосов
/ 16 ноября 2010

Похоже, проблема не на вашей стороне. Согласно Техническим вопросам и ответам QA1691 , ваш код в порядке.

1 голос
/ 01 декабря 2010

Попробуйте изменить:

SKPayment *payment = [SKPayment paymentWithProduct:[response.products objectAtIndex:0]];

до:

SKPayment *payment = [SKPayment paymentWithProductIdentifier:[response.products objectAtIndex:0].productIdentifier];

У меня была такая же проблема, как и у вас, и это изменение сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...