2015-12-27 1 views
1

Я пытаюсь внедрить приложение In App Purchase в tvOS. настроить все в Xcode и iTunesConnect, но когда я пытаюсь проверить в App он выдает эту ошибку:tvOS - В случае покупки приложения «Не удается подключиться к магазину iTunes Store»

Cannot connect to iTunes Store.

Я не получаю никаких предупреждений о моей Apple TV, чтобы подтвердить покупку.

Это код:

- (IBAction)tapsRemoveAds{ 
    NSLog(@"User requests to remove ads"); 

    if([SKPaymentQueue canMakePayments]){ 
     NSLog(@"User can make payments"); 

     //If you have more than one in-app purchase, and would like 
     //to have the user purchase a different product, simply define 
     //another function and replace kRemoveAdsProductIdentifier with 
     //the identifier for the other product 

     self.request= [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:kRemoveAdsProductIdentifier]]; 
     self.request.delegate = self; 
     [self.request start]; 
    } 
    else{ 
     NSLog(@"User cannot make payments due to parental controls"); 
     //this is called the user cannot make payments, most likely due to parental controls 
    } 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ 
    SKProduct *validProduct = nil; 
    NSInteger count = [response.products count]; 
    if(count > 0){ 
     validProduct = [response.products objectAtIndex:0]; 
     NSLog(@"Products Available!"); 
     [self purchase:validProduct]; 
    } 
    else if(!validProduct){ 
     NSLog(@"No products available"); 
     //this is called if your product id is not valid, this shouldn't be called unless that happens. 
    } 
} 

- (IBAction)purchase:(SKProduct *)product{ 
    SKPayment *payment = [SKPayment paymentWithProduct:product]; 

    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 
} 

- (IBAction) restore{ 
    //this is called when the user restores purchases, you should hook this up to a button 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
} 

- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 
    NSLog(@"received restored transactions: %lu", (unsigned long)queue.transactions.count); 
    for(SKPaymentTransaction *transaction in queue.transactions){ 
     if(transaction.transactionState == SKPaymentTransactionStateRestored){ 
      //called when the user successfully restores a purchase 
      NSLog(@"Transaction state -> Restored"); 

      [self doRemoveAds]; 
      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
      break; 
     } 
    } 
} 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{ 
    for(SKPaymentTransaction *transaction in transactions){ 
     switch(transaction.transactionState){ 
      case SKPaymentTransactionStatePurchasing: NSLog(@"Transaction state -> Purchasing"); 
       //called when the user is in the process of purchasing, do not add any of your own code here. 
       break; 
      case SKPaymentTransactionStatePurchased: 
       //this is called when the user has successfully purchased the package (Cha-Ching!) 
       [self doRemoveAds]; //you can add your code for what you want to happen when the user buys the purchase here, for this tutorial we use removing ads 
       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
       NSLog(@"Transaction state -> Purchased"); 
       break; 
      case SKPaymentTransactionStateRestored: 
       NSLog(@"Transaction state -> Restored"); 
       //add the same code as you did from SKPaymentTransactionStatePurchased here 
       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       //called when the transaction does not finish 
       if(transaction.error.code == SKErrorPaymentCancelled){ 
        NSLog(@"Transaction state -> Cancelled"); 
        //the user cancelled the payment ;(
       } 
       [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateDeferred: 
       NSLog(@"deffered"); 
       break; 
} 
    } 
} 

Любые идеи, почему это происходит?

ответ

1

Мне удалось решить проблему с выходом из учетной записи iTunes в настройках-> Учетные записи-> iTunes и Appstore, а затем приложение попросило меня ввести учетные данные, и я ввел тестовые учетные данные. Все работает нормально.

PS. Не используйте NSUserDefault для сохранения результата покупки, как это было на примере кода. Это был тестовый код, и NSUserDefault не будет работать, как ожидалось (iOS)

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