我对交易收据验证有一些疑问:
finishTransaction
仍会显示“付款成功”提醒视图,因为该交易实际上已成功,我想这会让用户感到困惑。很抱歉,如果我误解了应用内购买流程,或者我的问题不够明确。感谢。
修改:如果我发现收据无效,我想不应该致电finishTransaction
,但这是一个问题吗?文档说应用程序应始终调用该函数。此外,那时钱已经转移了...... confused
答案 0 :(得分:8)
收据验证可确保交易完成且成功。你不想从iPhone那里做到这一点,因为你无法真正信任用户的手机。
finishTransaction
)如果服务器关闭,您不应该完成交易,而是向用户显示“不可用消息”。
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
稍后会再次调用。
但如果您发现收据无效,则应完成关联的交易。如果没有,您可能会在事务队列中永久存在额外的事务。这意味着每次您的应用运行时,每次交易都会调用paymentQueue:updatedTransaction:
一次......
在我的应用中,收据验证是通过网络服务完成的,如果收据无效,则会返回错误代码。这就是需要外部服务器的原因。如果用户以某种方式设法跳过收据验证(通过伪造Web服务“成功”响应),他将无法解锁内容/访问功能,因为服务器没有购买的痕迹。
答案 1 :(得分:2)
只是想补充一点,如果用户不可信,则不能假设他们在封闭网络上也没有伪造与服务器的通信。即:除非您使用类似于SSL证书的东西,否则您无法确定您的服务器验证来自您的服务器而不是他的Mac。