2010-11-03 4 views
4

Я реализую функцию покупки приложений для книжной полки, но при покупке книг появляется сообщение RANDOMLY.Apple In app purchase StoreKit error

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

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

в то же время наблюдатель распечатать другую ошибку: «Не удается подключиться к ITunes Store».

мой в приложении покупки логика поток:

APP START:

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

Похоже, что проблема ISN» т на вашей стороне. Согласно Technical Q&A QA1691, ваш код в порядке.

+0

Кто-то ответил в форумах разработчиков https://devforums.apple.com/thread/69875?tstart=0 – Alan

1

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

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

к:

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

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

Смежные вопросы