SKPaymentTransactionStateFailed,但没有NSError

时间:2013-03-15 06:24:04

标签: storekit in-app-purchase

我们有一个购买IAP硬币的应用程序。我们最近收到了一些用户的邮件,说他们无法购买任何硬币。我查看了他们的会话日志并看到了失败的IAP事件,每个事件都没有记录失败原因。这是相关的代码:

- (void)_purchaseRequestFailed:(SKPaymentTransaction *)transaction state:(StoreTransactionState)state error:(NSError *)error
{
    IAPProduct *product = [self getProductWithId:transaction.payment.productIdentifier];
    if (error.code==SKErrorPaymentCancelled) {
        [_metricsManager logFailIAP:product failReason:@"Payment canceled"];
    } else {
        [_metricsManager logFailIAP:product failReason:error.localizedDescription];
    }
    if ([_delegate respondsToSelector:@selector(didSucceedPurchasingProduct:)]) {
        [_delegate didFailPurchasingProduct:product];
    }
}

在logFailIAP中,我记录时间,UDID,事件名称和error.localizedDescription等内容。

 if (failReason != nil && failReason.length > 0) {
        [metricsDictionary setObject:failReason forKey:MetricsEventParameterFailReason];
 }

在日志中,我收到失败的IAP事件,但没有记录失败的原因。是否有任何情况,你得到“SKPaymentTransactionStateFailed”,但是,有一个空的error.localizedDescription?我可以确认日志有效,并且在其他设备中看到“付款已取消”和“无法连接到iTunes”等错误。该问题并非特定于设备或iOS。

1 个答案:

答案 0 :(得分:1)

我在以下情况中遇到了error

  • 用户在其设备上更新iOS。

  • 更新后,用户立即进入您的应用并尝试购买。

  • 而不是通常的购买对话框,他们得到“iTunes服务条款已经改变。你需要接受新的T& C”(或其他一些东西),将它们重定向到iTunes应用程序并显示他们是新的T& C's。然后取消付款,您的收入为error,显然为零error.localizedDescription

对于这种情况,您的应用需要成为系统更新后用户与iTunes Store的第一个交互点。