iOS 11/10上的应用内购买结果不一致
在以前版本的应用程序中,我的应用程序内购买(IAP)运行良好。在我的最新版本中,用户向我报告了一些奇怪的不一致之处 IAP只是允许用户访问应用程序的“专业”版本,该版本可以删除广告,并允许用户在应用程序处于后台时播放音频文件 问题: 用户可以在应用程序内成功购买IAP。他们收到消息说购买成功。但是,当他们重新启动应用程序时(按照成功购买UIAlert的指示),Pro功能不会解锁 当用户使用“恢复购买”按钮时,他们会收到一条错误消息,说明“无需恢复”基本上告诉他们没有购买任何东西 有趣的是,如果他们再次按下购买按钮,他们就会被告知他们已经购买了IAP,可以免费重新下载。同样,这不会解锁Pro功能 报告病例 我收到了许多关于这个问题的报告。iOS 10和iOS 11上的用户都遇到过此问题。不过,iOS 11和iOS 10上的其他用户也可以毫无问题地购买升级。所以我有点困惑是什么导致了这个问题 工具 我正在使用SwiftyStoreKit 0.10.5管理我的IAP。我使用Swift 4使用Xcode 9.0 下面是我用来购买和恢复购买的代码 出于安全考虑,我已经用***覆盖了我的包,因为我不知道如何处理它iOS 11/10上的应用内购买结果不一致,ios,swift,in-app-purchase,Ios,Swift,In App Purchase,在以前版本的应用程序中,我的应用程序内购买(IAP)运行良好。在我的最新版本中,用户向我报告了一些奇怪的不一致之处 IAP只是允许用户访问应用程序的“专业”版本,该版本可以删除广告,并允许用户在应用程序处于后台时播放音频文件 问题: 用户可以在应用程序内成功购买IAP。他们收到消息说购买成功。但是,当他们重新启动应用程序时(按照成功购买UIAlert的指示),Pro功能不会解锁 当用户使用“恢复购买”按钮时,他们会收到一条错误消息,说明“无需恢复”基本上告诉他们没有购买任何东西 有趣的是,如果他
// Purchase Product
func purchase(purchase: RegisteredPurchases) {
NetworkActivityIndicatorManager.NetworkOperationStarted()
SwiftyStoreKit.purchaseProduct(bundleID + "." + purchase.rawValue, completion: {
result in
NetworkActivityIndicatorManager.NetworkOperationFinished()
if case .success(let product) = result {
if product.productId == "com.************.RemoveAds" {
self.defaults.set(true, forKey: "NoAds")
}
if product.needsFinishTransaction {
SwiftyStoreKit.finishTransaction(product.transaction)
}
self.showAlert(alert: self.alertForPurchaseResult(result: result))
}
})
}
// Restore Purchases
func restorePurchases() {
NetworkActivityIndicatorManager.NetworkOperationStarted()
SwiftyStoreKit.restorePurchases(atomically: true, completion: {
result in
NetworkActivityIndicatorManager.NetworkOperationFinished()
for product in result.restoredPurchases {
if product.needsFinishTransaction {
SwiftyStoreKit.finishTransaction(product.transaction)
}
if product.productId == "com.************.RemoveAds" {
self.defaults.set(true, forKey: "NoAds")
}
print(product.productId)
self.defaults.set(true, forKey: "\(product.productId)")
}
self.showAlert(alert: self.alertForRestorePurchases(result: result))
})
}
如果您能提供有关这一事件原因的任何信息,我将不胜感激。因为我现在有点不知道原因是什么
谢谢 很难说清楚,因为我不知道SwiftyStoreKkt内部发生了什么(就个人而言,我不太喜欢为IAP使用其他框架;特别是使用闭包而不是委托模式的“快速”框架。直接实现IAP委托非常简单),但听起来交易没有正确完成,因此仍处于未决状态。另外,从用户体验的角度来看,需要重新启动应用程序并不太好。感谢您的回复。我接受了您的建议,并在AppDelegate DidFinishLaunching方法中添加了一个CompleteTransaction检查。由于我只是在现场看到他,我现在将发布一个修复版本,看看它是否解决了这个问题。谢谢你的帮助!