在 iOS 13 中请求应用内购买失败

Requesting an In App Purchase in iOS 13 fails

我使用 SwiftyStoreKit 请求应用程序内购买,但在 iOS 13:

时仅出现此错误
Error: Optional(Error Domain=ASDErrorDomain Code=507 "Error decoding object" UserInfo={NSLocalizedDescription=Error decoding object, NSLocalizedFailureReason=Attempted to decode store response})

我无法请求有关产品的信息,也无法使用沙盒帐户进行购买。但是,它在我的设备上的 iOS 12.1 中运行良好。它不适用于 iPhone 11 模拟器或带有 iOS 13.

的实际设备

我找了很多,Xcode11 GM seed 1测试版模拟器有这个问题,但还没有找到解决办法。我也用新发布的 Xcode 11 GM seed 2 版本测试了它,但没有修复我的问题。

有没有人知道如何在安装了 iOS 13 的情况下再次请求和购买应用内购买?

我遇到了同样的问题,iOS13 模拟器产生了同样的错误,iOS12 模拟器运行良好。 然后,我在安装了 iOS13 的 iPhone 上进行了试用,那里的调用也完美无缺。

希望它能尽快在 Xcode 模拟器中得到修复,我想直到那时我们都会遇到错误。

编辑: 现在它似乎也适用于 iOS 13 个模拟器设备。

重新启动 Xcode,模拟器成功了:现在我的应用内购买可以在 iOS 13 模拟器中正确加载。

编辑:这也发生在版本 Xcode 11 中。偶尔会发生,但重新启动 Xcode 和模拟器仍然有帮助。

编辑 2:在 Xcode 12 beta 中也存在此错误。但解决方案是创建新的 StoreKit 配置文件(在 File -> New 菜单中)

然后在此处添加您的所有产品。使用与 AppStore Connect 中相同的产品 ID。

然后将此文件添加到运行方案配置中。

注意:我已经更新了答案,请阅读编辑部分。

为了分享我的经验,这个问题似乎在Xcode 11.1 GM Seed 中不再存在。无需重新启动模拟器或 Xcode 即可继续进行应用内购买。

我提交了一个应用程序以供审核,但由于该特定错误而被拒绝。事实证明,它被拒绝了一个愚蠢的原因,因为它不是我的应用程序的错误,但我花了几个小时试图绕过它。

所以,只需更新到 Xcode 11.1 GM Seed 并再次 运行。一切都会好起来的。

编辑

这个问题在 Xcode 11.1 中仍然存在,显然我很幸运,它没有再次发生在我身上。但是,出于完全相同的原因,我第二次被拒绝。 最终起作用并使我的应用获得批准的是:

我不得不通过再次编辑和保存来更新我在 App Store 上的 IAP 记录。

所以,我建议你也试试看;在您的 IAP 中临时更改某些内容,保存并还原您的更改(并再次保存)以便刷新 App Store 上的记录。

仅供参考,在第二次拒绝后,Apple 使我的 IAP 无效,因此为我指明了方向。最后,这对他们来说似乎是一个已知问题。

详情read this discussion 我在 Reddit 上写过。

对于那些在 iOS 14.0 中有此问题的用户,您仍然需要按照@silvansky 的回答创建 storekit 配置文件。我们可以在发出任何产品请求之前实际启动 SKTestSession 以避免错误,而不是将其添加到目标。

if #available(iOS 14.0, *) {
    do {
        let session = try SKTestSession(configurationFileNamed: "Your_StoreKit_Configuration_File_Name")
        session.disableDialogs = true
    } catch {
        // catch error here
    }

    // Start your product request here
    let productIdentifiers = Set(["product_identifier_1", "product_identifier_2"])
    let productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
    productsRequest.delegate = self

    // Run the request
    productsRequest.start()
}

您可以参考 Apple 的 SKTestSession 文档了解更多信息:https://developer.apple.com/documentation/storekittest/sktestsession