将其他数据附加到消耗品

时间:2019-01-23 10:16:43

标签: ios app-store payment storekit

我正在构建一个允许购买数字商品的应用。由于我们有很多商品,我们不能使用非消耗品,因此我们为不同的价格类别(2欧元商品,3欧元商品等)定义了易耗品。

当用户要购买特定商品时,我会获得该特定价格类别的易耗品,然后开始购买该易耗品。然后,我想将收据发送到我的服务器,进行验证,然后解锁有问题的物品。

在这里我不确定如何实现这一点。要获取交易收据,我需要收听PaymentQueue,因此我是异步获取收据的,没有实际购买的上下文。

如何将收据与用户购买的商品相关联?

据我所知,有两种选择:

  1. 将数据附加到我的购买中,以便我可以从收据中读出。 有可能吗?那是理想的情况。
  2. 存储用户开始购买的商品ID的列表,当我从队列中获得收据(或多张收据)时,我只需查找商品ID,然后将其发送到我的服务器即可。购买完成后,我从列表中删除了商品ID。这是可行的解决方案吗?多台设备可能会出现问题,虽然没有启动付款,但一台设备会收到一张收据?

1 个答案:

答案 0 :(得分:1)

我刚刚在我的应用中遇到了同样的问题。这是我的处理方式:

  
      
  1. 将数据附加到我的购买中,以便我可以从收据中读出。那可能吗?那将是理想的情况。
  2.   

您可能已经发现,这是不可能的。

  
      
  1. 存储用户开始购买的商品ID的列表,当我从队列中获得收据(或多张收据)时,我只需查找该商品   id,并将其发送到我的服务器。购买完成后,   我从列表中删除了商品ID。这是可行的解决方案吗?能够   多个设备有任何问题,其中一个设备   收据,但未开始付款?
  2.   

这与我所做的非常相似。每当用户进行购买时,我都会创建自己的购买对象,该对象将添加到“用户默认值”中的数组中。我的付款对象包含App Store Connect产品标识符以及我的应用程序特定产品信息。

当收据上出现收据时,我将执行以下操作:

  1. 在“用户默认值”中查找具有匹配product_identifier的第一个付款对象。
  2. 从PaymentQueue中删除付款对象。请注意,PaymentQueue可以接收一系列交易。
  3. 对于每个对象/交易对,发送到我的服务器进行验证和处理
  4. 如果一切顺利,请完成交易
  5. 如果我最后出了问题,我将付款对象重新添加到“用户默认设置”,而未完成交易

在沙盒中进行测试时,我确实出现了一些奇怪的行为,我发现旧的收据也出现在PaymentQueue上。在这种情况下,“用户默认值”中没有匹配的对象,因此无论如何我都要完成交易。