我已经阅读了很多关于使用您自己的用户登录系统处理自动续订订阅的SO答案,但是我仍然不知道如何处理这个问题:当事务观察器被触发时该怎么办用户已注销。
Apple建议在App Delegate中实现一个事务观察器:
在发布时添加应用的观察者可确保它会持续存在 在您的应用程序的所有启动过程中,从而允许您的应用程序接收所有 付款队列通知。
假设用户开始购买,但它没有立即完成(例如,因为它需要得到父母的批准,或者应用程序崩溃等)。用户注销并再次打开应用程序,由于我们正在观察App Delegate中的事务,因此我们可能会在启动应用程序之前立即收到一个事务,然后才能登录。然后我们就不知道将订阅关联到哪个用户。 / p>
两个想法:
非理想:我是否应该存储订阅待处理的事实,并假设第一个登录的用户是正确的,然后在登录后以某种方式将其关联到它们?如果是这样,我会在哪里保留收据? KeyChain,UserDefaults?这听起来很笨重。
另一种听起来更好的方式:我可以在启动时存储有关交易的一些信息,然后使用其中一个字段来确切知道用户的订阅购买刚刚完成了吗?
(不是特别相关,但仅供参考我使用的是SwiftyStoreKit)。
答案 0 :(得分:1)
这就是我接近这个的方法:
当用户尝试购买订阅时,我首先让他们登录或创建帐户。
用户登录后,我将appStoreReceipt发送到我的服务器并将其存储在那里。我检查并确保用户可以购买。 (此时他们应该有他们试图购买的订阅)
一旦我从服务器收到用户应该可以购买的回复,我就可以开始进行应用内购买
当应用内购买过程完成后,我将更新后的appStoreReceipt发送到我的服务器并升级其帐户。
您担心的问题是,如果用户完成了第3步,但从未进入第4步。
好吧,因为我的收据存储在我的服务器上(来自第2步),我可以要求Apple提供收据的最新版本,如果它显示他们确实购买了,我升级他们的帐户。您可以选择何时进行此项检查,每次启动应用程序时,或每次用户登录时都可以选择。
希望这有帮助。