【问题标题】:SKPaymentTransactionStateFailed, but no NSErrorSKPaymentTransactionStateFailed,但没有 NSError
【发布时间】:2013-03-15 06:24:04
【问题描述】:

我们有一个可以购买 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。

【问题讨论】:

  • 您的 paymentQueue:updatedTransactions: 方法看起来如何。尤其是你如何遍历事务数组。

标签: storekit in-app-purchase


【解决方案1】:

我在以下场景中遇到了 nil error

  • 用户在他们的设备上更新 iOS。

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

  • 他们得到的不是通常的购买对话框,而是“iTunes 服务条款已更改。您需要接受新的 T&C”(或类似内容),这会将他们重定向到 iTunes 应用程序并向他们显示新的条款和条件。然后付款被取消,你得到一个 nil error,显然,一个 nil error.localizedDescription

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多