Ios 在应用程序外部购买的StoreKit项目(从我的应用程序重定向到应用程序商店应用程序)

Ios 在应用程序外部购买的StoreKit项目(从我的应用程序重定向到应用程序商店应用程序),ios,in-app-purchase,storekit,Ios,In App Purchase,Storekit,我有一个应用程序使用非续费订阅模式。使用应用内购买测试帐户时效果非常好。然而,在苹果的生产服务器上,有时用户出于某种原因被从我的应用程序带到应用商店(有时是因为更新了账单信息,有时是为了回答安全问题)。这是在付款被添加到队列和苹果自己的付款流之后。一旦用户点击alert view(警报视图)选项进入应用商店,my transaction Observer将获得一个状态为SKPaymentTransactionStateFailed的交易。那很好。但是,在用户更新其账单信息或确认其安全问题后,系统

我有一个应用程序使用非续费订阅模式。使用应用内购买测试帐户时效果非常好。然而,在苹果的生产服务器上,有时用户出于某种原因被从我的应用程序带到应用商店(有时是因为更新了账单信息,有时是为了回答安全问题)。这是在付款被添加到队列和苹果自己的付款流之后。一旦用户点击alert view(警报视图)选项进入应用商店,my transaction Observer将获得一个状态为
SKPaymentTransactionStateFailed
的交易。那很好。但是,在用户更新其账单信息或确认其安全问题后,系统会询问他们(仍在应用程序之外)是否仍要购买应用程序内购买。当这个过程结束时,它们会被带回我的应用程序(它已经自动关闭),而事务观察器不会返回任何东西。只有在检索产品列表时,队列才会使用购买的产品进行更新。观察员在会议之前登记通知

因此,我的问题是:

我如何处理在我的应用程序之外(在应用程序商店应用程序中)进行的购买?


如果在应用程序打开(但未完成)之前进行了购买,那么队列将在什么时候更新?我知道我应该让观察者一直运行,但我希望避免让用户购买两次该项目,因为不知道他们已经购买了该项目。

通过一些尝试和错误,我似乎已经解决了我的问题

结果证明,我没有很快初始化
SKPaymentQueue
的事务观察器。它需要初始化并作为事务观察者添加到
应用程序:didFinishLaunchingWithOptions:
方法中,并且不能迟于此。至于当交易进入时,您的transaction observer的
paymentQueue:updatedTransactions
方法将在您的应用程序下次激活时使用购买的交易进行调用。重要的是要注意,当你被带到应用商店时,你的应用可能会因为某种原因关闭一次,也可能不会关闭一次,如果它最终关闭,该方法将在下次应用打开时调用