我们最近被审核小组拒绝了应用内购买问题。
我们在iPhone上查看了您应用中的一个或多个错误 在Wi-Fi和蜂窝网络上运行iOS 8.2。 特别, 您的应用程序的In App Purchase Transaction无法完成。 重现的步骤是:
- 启动应用
- 导航至购买/充值标签
- 继续购买其中一个应用程序内购买产品
- 出现应用程序内购买确认窗口
- 确认购买
- 应用内购买导致错误
醇>
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状态。新产品处于等待审核状态。