在我的应用程序的早期版本中,我在应用程序购买(IAP)工作正常。在我的最新版本中,我发现用户向我报告了一些奇怪的不一致。
IAP只允许访问" Pro"该应用程序版本可删除广告,并允许用户在应用程序背景下播放音频文件。
问题: 用户可以在应用程序中成功购买IAP。他们收到消息,说明购买成功。但是,当他们重新启动应用程序时(按照成功购买UIAlert的指示),Pro功能未解锁。
当用户然后使用"恢复购买"按钮,他们收到一条错误消息,指出"无法恢复"基本上告诉他们他们没有购买任何东西。
有趣的是,如果他们再次按下购买按钮,那么他们会被告知他们已经购买了IAP并且可以免费重新下载。同样,这并不能解锁Pro功能。
举报案例 我已经向我报告了很多这个问题的案例。 iOS 10和11上的用户都遇到过此问题。但是,iOS 11和10上的其他用户也可以毫无问题地购买升级版。所以我对导致问题的原因感到有些困惑。
工具 我使用SwiftyStoreKit 0.10.5来管理我的IAP。我使用Swift 4在Xcode 9.0上。
以下是我用来购买和恢复购买的代码。
出于安全原因,我用***覆盖了我的bundleID,因为我不知道可以用它做什么。
// 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))
})
}
有关这可能是什么原因的任何信息我都会非常感激。因为我目前在原因上有点失落。
谢谢!