我们有一个 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。