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

时间:2011-06-22 12:03:39

标签: ios in-app-purchase

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

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

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

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

6 个答案:

答案 0 :(得分:9)

The in-app purchasing guide讨论了“取消”订阅的概念。这是我见过的唯一一个讨论这个主题的地方。

有关取消日期字段的

Further details也可以在App Store收据验证文档中找到。

cancellation_date

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

  

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

答案 1 :(得分:6)

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

  

你好约翰尼斯,

     

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

     

您可以使用Apple开发人员错误报告网页-http://bugreport.apple.com

提交增强请求。      

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

所以我们有它。

答案 2 :(得分:4)

已退款,但您的应用根本不会收到任何通知。无论是应用程序内购买,应用程序下载还是任何其他iTunes内容,即使用户要求退款,用户仍可以使用该内容。

答案 3 :(得分:4)

策略是:

  1. 您在数据库中保存latest_receipt(“MIIUJgYJKoZIhvc ...”base64)字段,并与用户帐户相关联。

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

  3. 在收据中,您检查是否有cancellation_date字段。如果您找到它,请根据documentation

  4. 进行处理
      

    对待已取消的收据,就像没有购买一样。

    同样您还要检查订阅续订(请查看expires_date_ms字段)。

答案 4 :(得分:1)

在iOS 14中,将新方法添加到SKPaymentTransactionObserver协议中,当用户不再有权进行一次或多次应用内购买时调用该方法?https://developer.apple.com/documentation/storekit/skpaymenttransactionobserver/3564804-paymentqueue 尽管文档中没有说明在哪种情况下调用此方法,但Apple确实在WWDC2020视频中的26:55 tell https://developer.apple.com/videos/play/wwdc2020/10661/

中对此进行了说明。

答案 5 :(得分:0)

根据最新文档,类型为length.out的{​​{3}}正在由Apple客户支持处理取消情况。