2017-07-23 33 views
0

我已经阅读了很多关于使用您自己的用户登录系统处理自动更新订阅的SO解答,但有一个问题,我仍然不确定如何处理:在用户注销时触发事务观察器时要执行的操作。自动更新的订阅:当用户注销时处理购买

苹果建议实施权在App委托事务观察员:

添加您的应用在发射观察员将确保自己在你的应用程序的所有发射坚持 ,从而使您的应用程序接收所有 付款队列通知。

说用户开始购买,但它不立即完成(例如,因为它需要由他们的父母批准,或应用程序崩溃等)。用户注销并再次打开该应用程序,由于我们正在观察App Delegate中的事务,所以在启动应用程序时,我们可能会在他登录之前立即收到事务。然后,我们不知道要将哪个用户关联到该订阅。

两个想法:

  • 非理想:我应存储的事实,有一个订阅悬而未决,假设第一个用户登录将是正确的,然后关联在他们登录后以某种方式给他们?如果是这样,我会在哪里保存收据? KeyChain,UserDefaults?这听起来很笨拙。

  • 另一种听起来更好的方式是:我可以在启动时存储有关事务的一些信息,然后使用这些字段中的一个实际确切知道哪些用户的订阅购买刚完成?

(不特别相关,但FYI我使用SwiftyStoreKit)。

回答

1

这是我会怎么处理这:

  1. 当用户尝试购买订阅,我首先让他们登录或注册一个帐号。

  2. 一旦用户登录,我将他们的appStoreReceipt发送到我的服务器并存储在那里。我检查并确保用户能够购买。 (在这一点上,他们应该有他们试图购买订阅)

  3. 一旦我得到来自用户应该能够购买我继续和启动应用程序内购买

  4. 服务器的响应
  5. 当应用内购买过程完成后,我将更新的appStoreReceipt发送到我的服务器并升级其帐户。

你所担心的问题是什么,如果用户获取与第3步完成,但不会继续第4步

那么,既然我已经存储在我的服务器上的收据(从第2步),我可以要求苹果给予最新版本的收据,如果它显示了,他们没有购买,我提升自己帐户。您可以选择正确的时间进行此检查,可以是每次启动应用程序或每次用户登录时。

希望这会有所帮助。

+0

谢谢,你的答案有帮助。这基本上意味着忽略completeTransaction步骤 - 意思是我们只需要完成交易,如果needsFinishTransaction,而不是升级任何用户帐户。不完美。但如果我们在购买任何订阅或IAP(我不知道)之前确实可以获取appStoreReceipt来识别它们,这意味着我们可以使用它来检查哪个用户应该升级, completeTransaction,通过在我的数据库中查找收据ID。这样我们可以避免在每个应用程序打开或登录时检查。再次感谢。 – Kqtr

+0

可以有人回答我的问题 https://stackoverflow.com/questions/45433136/how-subscription-status-url-works-for-apple-in-app-purchases-auto-renewable – Sukeshj

相关问题