在线验证iOS上非消耗性IAP的应用内购买的正确工作流程是什么?
虽然我发现了很多关于应用内购买的信息,但我没有发现关于如何实际执行在线验证的详细信息。
一般设置:
-
iOS应用程序通过添加
SKPaymentQueue
到付款队列
-
iOS电话
paymentQueue:updatedTransactions:
具有
transaction.transactionState == SKPaymentTransactionStatePurchased
购买完成后
-
此时,应用程序收据已经更新,并且添加了非消耗性物品的购买。
-
收据数据和
transaction.transactionIdentifier
通过HTTP POST发送到我自己的web服务
-
网络服务将数据发布到苹果
/verifyReceipt
终点
-
如果回执无效,Apple服务器将响应一个错误,如果回执有效,将响应详细的JSON数据
-
从苹果收到的JSON数据包括之前所有非消耗品和订阅购买以及当前消耗品购买的信息。
-
有关耗材采购的信息可以通过
product_id
字段或使用
交易事务标识符
-
web服务将购买添加到当前用户帐户和/或向iOS应用程序发回有效/无效响应。
-
如有必要(当购买未在线存储/处理时),iOS应用程序可以处理购买(添加硬币或其他)
-
交易是使用
[queue finishTransaction:transaction]
其他意见:
-
收据包括所有之前的非消耗品和订阅购买以及当前/最后一次消耗品购买的信息。
-
关于当前消费品购买的信息在下次购买之前可用(无论是消费品、非消费品还是订购)。
-
重新启动应用程序不会破坏有关当前消费品购买的信息
-
删除并重新安装应用时,收据为空/不存在。恢复以前的购买后,收据仅包括非消耗品和订阅购买的信息。没有关于非消费品采购的信息被恢复(不足为奇)
结论:
-
如果(由于某种原因)收据无法发送到web服务(服务器关闭、无连接等),可以稍后重试。采购数据将在收据中提供,直到下一次采购。
-
为了能够在下次购买后访问收据数据,必须实施自定义存储方法(例如,将收据数据保存到文件)。
-
通过这种方式,用户可以了解未完成的验证,并提供重试选项。
这是一个完整有效的工作流程来验证在线应用内消费品购买,还是我遗漏了一些特殊情况?