ios - 自动续订订阅 : handle purchase when user is logged out

标签 ios in-app-purchase storekit

我已经阅读了很多关于使用自己的用户登录系统处理自动更新订阅的答案,但是有一个问题我仍然不确定如何处理:当事务观察器被触发时该怎么办用户已注销。

Apple 建议在 App Delegate 中实现事务观察器:

Adding your app's observer at launch ensures that it will persist during all launches of your app, thus allowing your app to receive all the payment queue notifications.

假设用户开始购买,但没有立即完成(例如,因为需要得到 parent 的批准,或者应用程序崩溃等)。用户注销并再次打开应用程序,由于我们在 App Delegate 中观察交易,我们可能会在他登录之前启动应用程序时立即收到交易。然后我们不知道将订阅关联到哪个用户。

两个想法:

  • 不理想:我是否应该存储存在待定订阅的事实并假设第一个登录的用户是正确的,然后在他们登录后以某种方式将其关联到他们?如果是这样,我应该把收据放在哪里?钥匙串(keychain)、用户默认值?这听起来很笨拙。

  • 另一种听起来更好的方式:我可以在交易启动时存储一些有关交易的信息,然后使用其中一个字段来真正了解谁的用户的订阅购买刚刚完成吗?

(不是特别相关,但仅供引用,我正在使用 SwiftyStoreKit)。

最佳答案

这就是我的处理方式:

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

  2. 用户登录后,我将他们的 appStoreReceipt 发送到我的服务器并将其存储在那里。我检查并确保用户能够购买。 (此时他们应该有他们想要购买的订阅)

  3. 一旦我从服务器收到用户应该能够购买的响应,我就会继续并开始应用内购买

  4. 应用内购买流程完成后,我将更新后的 appStoreReceipt 发送到我的服务器并升级他们的帐户。

您担心的问题是,如果用户完成了第 3 步,但从未到达第 4 步,该怎么办。

好吧,因为我的服务器上存储了他们的收据(来自第 2 步),我可以要求 Apple 提供他们收据的最新版本,如果显示他们确实购买了,我升级了他们的帐户。您可以选择何时进行此检查,可以是每次应用启动时,也可以是每次用户登录时。

希望这对您有所帮助。

关于ios - 自动续订订阅 : handle purchase when user is logged out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45264299/

相关文章:

ios - 使用 AFIncrementalStore 和 NSFetchedResultsController 的死锁

ios - Xcode 8 似乎错误地使用 Swift 3 更改了嵌入式框架函数签名

android - 来自 C#/.NET 服务的 Google Play Android Developer API - (400) 错误请求

iphone - Apple 应用内购买 StoreKit 错误

iphone - StoreKit SKProducts请求崩溃

iphone - [[SKPaymentQueue defaultQueue] addTransactionObserver :observer]; 上的应用程序崩溃

iphone - 为动态表单元格添加 header 和 NSArray

ios - 自动布局确定 subview 的大小

ios - 未检索到 Swift 沙箱测试产品

ios - 在不将屏幕截图上传到 iTunes Connect 的情况下测试应用内购买