我正在使用 StoreKit 进行应用内购买。我发现当用户按下“取消”按钮时,API 的行为很古怪。
例如,如果我在“确认您的应用内购买”屏幕上按取消,我会得到我期望的SKPaymentTransactionStateFailed
交易。error.code == SKErrorPaymentCancelled
但如果我按下购买然后按下取消,我会得到一笔Failed
交易error.code == 0
。这error.localizedDescription
是“无法连接到 iTunes Store”,这显然是一个谎言。
将所有Failed
交易都视为可忽略的取消是很诱人的,但我也可以清楚地看到,如果设备在飞行模式下处于离线状态,我会得到Failed
一笔没有弹出警报的交易;在这种情况下,我真的应该通知用户解释问题。
我注意到MKStoreKit假设所有失败都是取消。MKStoreManager
的failedTransaction
方法永远不会被调用;MKStoreObserver
总是要求transactionCanceled
所有的Failed
交易。MKStoreManager.h
评论建议没有错误消息,这transactionCanceled
是有道理的,但是谁会通知用户有关Failed
未取消的交易?
处理这些故障的最佳实践是什么?我应该吞下错误吗?总是显示错误,即使它是多余的?