代码之家  ›  专栏  ›  技术社区  ›  Andrei Herford

在iOS上在线验证非消耗品应用内购买收据的正确工作流程?

  •  0
  • Andrei Herford  · 技术社区  · 7 年前

    在线验证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服务(服务器关闭、无连接等),可以稍后重试。采购数据将在收据中提供,直到下一次采购。
    • 为了能够在下次购买后访问收据数据,必须实施自定义存储方法(例如,将收据数据保存到文件)。
    • 通过这种方式,用户可以了解未完成的验证,并提供重试选项。

    这是一个完整有效的工作流程来验证在线应用内消费品购买,还是我遗漏了一些特殊情况?

    0 回复  |  直到 7 年前