【问题标题】:Saving / restoring auto-renewing receipts without duplicates保存/恢复自动更新收据而不重复
【发布时间】:2013-07-10 07:23:54
【问题描述】:

我正在开发一个带有自动更新收据的应用程序,并将它们保存在服务器中,这一切都很好,直到用户恢复他们的购买 - 这会导致重复。

transaction_id 字段对于每次恢复时的同一张收据都是不同的,original_transaction_id 显然在每次续订时都相同,所以我不能使用它。 unique_identifier 字段也是一样的(我不明白它的独特之处)。 我一直在使用 web_order_line_item_id 字段,看起来还不错,但我只是用一个全新的帐户对此进行了测试,结果是重复的,所以这也没用。

我在这里很明显地遗漏了一些东西?每张收据都必须有一个字段是唯一的,但每次恢复都不会改变?

【问题讨论】:

  • 既然你把收据保存到你的服务器上,那你为什么不直接从服务器上检索收据呢?
  • 我在大多数使用场景下都这样做,但我需要允许用户在新设备或恢复设备上恢复购买。
  • 我假设您有某种与您的自动续订订阅相关的登录信息。而且我还假设您将登录名与保存在服务器上的收据相关联。考虑到这一点,设备是新的还是恢复的都没有关系。每当用户登录时,您都可以向服务器查询收据并将其返回。我的假设错了吗?
  • 不,用户不需要登录我的应用程序;他们应该可以只恢复收据并通过那些不需要注册和记住密码等的人来识别它们。它认为可能同时使用 original_transaction_id 和购买日期就可以了,但这似乎有点混乱: /
  • the transaction_id is different for every receipt, so you can't have duplicates if you use that as the primary key 实际上,这意味着如果您使用 transaction_id 作为 PK,您可能会在数据库中获得与一次购买相对应的两条记录。目前尚不清楚——如何避免这种情况。

标签: ios save in-app-purchase receipt


【解决方案1】:

显然original_transaction_idpurchase_date 是仅有的两个在恢复购买后不会改变的唯一值。你也可以依赖latest_receipt_info -> web_order_line_item_id,因为它在恢复之间不会改变(不像latest_receipt_info -> transaction_id)。通过检查latest_receipt_info,您可以找到订阅的expiration_date,显然苹果认为这对您来说应该足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多