应用程序内购买在SandBox中运行良好,但被审核小组拒绝

时间:2015-05-04 03:57:35

标签: ios in-app-purchase appstore-approval

我们最近被审核小组拒绝了应用内购买问题。

  

我们在iPhone上查看了您应用中的一个或多个错误   在Wi-Fi和蜂窝网络上运行iOS 8.2。   特别,   您的应用程序的In App Purchase Transaction无法完成。   重现的步骤是:

     
      
  1. 启动应用
  2.   
  3. 导航至购买/充值标签
  4.   
  5. 继续购买其中一个应用程序内购买产品
  6.   
  7. 出现应用程序内购买确认窗口
  8.   
  9. 确认购买
  10.   
  11. 应用内购买导致错误
  12.   

BUT!应用程序内购买在沙盒中运行良好!我们检查了我们服务器上的登录,但是我们找不到任何收据验证日志。似乎购买完成窗口根本没有出现。

我们发现有时会使用以下代码:

SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier];
[[SKPaymentQueue defaultQueue] addPayment:payment];

这是唯一的理由吗? T.T

编辑: 我们之前发布了几个版本。这次我们添加了一个新产品。但我们忘了将其标识符添加到以下数组中。

-(void)requestProducts
{
    if (_products) {
        return;
    }
    NSSet* identifiers = [NSSet setWithObjects:
                          @"identifier",
                          @"new identifier",  // forgot this line
                          nil];
    SKProductsRequest* _request = [[SKProductsRequest alloc] initWithProductIdentifiers:identifiers];
    _request.delegate = self;
    [_request start];
    _requestProcessing = YES;
}

因此以下代码将返回nil:

-(SKProduct*)getProduct:(NSString *)identifier
{
    if (_products) {
        for (SKProduct* product in _products) {
            if ([product.productIdentifier isEqualToString:identifier]) {
                return product;
            }
        }
    } else if (!_requestProcessing) {
        [self requestProducts];
    }
    return nil;
}

当用户购买产品时:

-(void)buyProductIdentifier:(NSString *)productIdentifier
{
    if (![self isNetworkOK] || ![SKPaymentQueue canMakePayments]) {
        [[NSNotificationCenter defaultCenter] postNotificationName:NotifyPurchaseFailed object:productIdentifier];
        return;
    }

    NSLog(@"Buying %@...", productIdentifier);
    SKProduct* product = [self getProduct:productIdentifier];
    if (product) { // the new identifier gets nil here
        SKPayment* payment = [SKPayment paymentWithProduct:product];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
    } else {  // calls the deprecated api
        SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier];
        [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
}

但它在沙盒中运行良好。

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

有什么想法吗?除新的产品外,itunes connect上的所有产品都处于Approved状态。新产品处于等待审核状态。

0 个答案:

没有答案