Apple如何通知iOS应用程序退还应用程序内购买(IAP)?

Cra*_*aig 45 in-app-purchase ios

我已经在我的应用程序中成功实现了Apple iOS IAP并在沙箱中进行了测试.效果很好.

我担心用户可以用IAP购买东西,将其下载到我的应用程序中,然后向Apple投诉并获得退款.没有明显的退款方式报告给我的应用程序.它们是否被排除在"恢复"操作期间收到的产品列表之外?是否有一些未记录的交易类型会在退款时在我的SKPaymentTransactionObserver中异步显示?

现在我的运营假设我需要在执行恢复之前删除用户的IAP事务,并且退回的任何内容都不会出现在已恢复的事务列表中.这是正确的方法吗?有没有办法在沙箱中测试这个?

有没有人在生产环境中看到过退款并且可以解释它们是如何工作的?

ara*_*dil 9

应用内购买指南讨论了"取消"订阅的概念.这是我见过的唯一一个讨论这个主题的地方.

有关取消日期字段的更多详细信息,也可以在App Store收据验证文档中找到.

cancellation_date
Run Code Online (Sandbox Code Playgroud)

解码收据后,您可以获得取消日期,该日期将告诉您以下内容:

对于Apple客户支持取消的交易,取消的时间和日期.

  • @ChrisPrince只要您始终将原始收据存储在服务器上,您就可以再次将其发送到Apple的服务器,他们会向您发送一个带有newest_receipt_info字段的响应(其中包含in_app字段的更新条目)和一个newest_receipt字段(这是你应该存储的新原始交易).在更新后的receipt_info条目中,如果通过Apple支持收回购买,您将获得cancel_date. (3认同)
  • @aradil我们现在开始获得退款非重复订阅的"cancellation_date".最后,我们可以抓住购买一年的人,声称这是一个意外,并继续免费使用该应用程序. (3认同)
  • 据此,https://developer.apple.com/library/ios/technotes/tn2413/_index.html,对于消费品和非续订订阅产品,没有cancel_date. (3认同)

Kir*_*kov 8

策略是:

  1. 您将latest_receipt("MIIUJgYJKoZIhvc..." base64) 字段保存在与用户帐户关联的数据库中。

  2. 每天您通过从保存的latest_receipt字段向 Apple 发送 base64 收据来查询 Apple 以验证所有收据。

  3. 在收据中,您检查是否有cancellation_date字段。如果找到,请根据文档进行处理

将取消的收据视为从未进行过购买。

您还可以以同样的方式检查订阅续订(检查expires_date_ms字段)。

  • 您确定通过验证旧收据,Apple 会将取消日期字段附加到 iOS 7+ 上的响应中吗?据我所知和实践,我认为苹果不会这样做。 (2认同)

Joh*_*rug 6

我今天(2018年12月6日)收到Apple开发者关系的回复:

你好约翰尼斯,

不幸的是,在回答您的问题时,没有支持的方法来检测用户已联系Apple Care并从应用内购买消耗品获得退款。我可以推荐给您的唯一选择是提交API增强请求,以使API可用于应用程序,以检测是否向应用程序内购买用户提供了退款。目前,此支持实际上仅适用于提供可自动续订的应用内购买的应用。

您可以使用Apple Developer Bug Report网页-http://bugreport.apple.com提交增强请求。

由于这是一个增强请求类型的问题,因此我将安排从您的帐户中扣除此事件,以备将来使用。

因此,我们有它。


Ben*_*ayo 5

退款已提供,但您的应用根本没有收到任何通知。无论是应用内购买、应用下载还是任何其他 iTunes 内容,即使用户要求退款,他们仍然可以使用这些内容。

  • @BenjaminMayo 如果购买被取消并为订阅购买提供退款,则收据将包含取消日期。 (2认同)
  • 因此,据我所知,唯一可能的解决方案是存储收据并每天/每个时间段验证它们以检查订阅是否已取消? (2认同)