【问题标题】:Requesting an In App Purchase in iOS 13 fails在 iOS 13 中请求应用内购买失败
【发布时间】:2020-01-21 00:48:44
【问题描述】:

我使用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 的实际设备。

我发现很多,Xcode 11 GM seed 1 beta 模拟器有这个问题,但还没有找到解决办法。我还使用新发布的 Xcode 11 GM 种子 2 版本对其进行了测试,但对我来说没有修复。

在安装了 iOS 13 的情况下,我如何再次请求和购买应用内购买,有没有人提供解决方案?

【问题讨论】:

  • 能否提供您如何购买的代码?我使用 Xcode 11 GM 种子,但尚未收到任何错误。
  • 我看到了同样的问题,但是使用 RMStore,虽然没有维护,但在 iOS 12 之前仍然可以正常工作。
  • 这方面有进展吗?我有一个非常相似的问题。
  • 我已尽一切可能使应用内购买也能在 iOS 13 的测试版中运行。此外,在 iOS 13 发布之前,我的应用程序被 Apple 拒绝(使用购买按钮时无操作)。后来我能够使用 iPhone 11 和 iOS 13 的公共版本测试该应用程序,一切正常。我不知道这到底是怎么回事。我也没有更改代码。该应用程序现在再次“等待审核”。如果它被接受,我会给你另一个更新。使用 iPhone 11、iOS 13 启动应用程序的控制台不再出现错误。
  • 与 Xcode 11 版本有同样的问题。 iOS 13 模拟器不会加载任何具有相同错误消息的产品。

标签: in-app-purchase ios13


【解决方案1】:

对于在 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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 这对我也有用,在 Xcode(和模拟器)的发布版本上。在此之前,我在 iPad 模拟器中遇到了同样的错误,但在 iPhone 模拟器中没有。
    • 每次启动新模拟器时都会发生。干得好,苹果。 :(
    • 我快疯了。 (2) 重新启动 xCode 和 Simulator 会有所帮助。非常感谢!
    • 感谢您使用 StoreKit 配置文件的解决方案。我们已将此添加到 Xcode 12.2,因为模拟器总是以 ASDErrorDomain 代码 507 响应,尽管 Xcode 和模拟器多次重新启动。 注意: 在真实设备上使用此方案时,它将不再从 App Store 检索 IAP,而是从 StoreKit 配置文件中读取。因此,我们复制了该方案,并仅在模拟器上使用带有 StoreKit 配置文件的方案。
    • 如果您不熟悉 Xcode(就像我一样):可以通过导航到 Product > Scheme > Edit Scheme 来编辑方案。
    【解决方案3】:

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

    分享一下我的经验,在 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上。

    【讨论】:

    • @TimurBernikovich 感谢您的更新,其他人也告诉我同样的情况。我编辑了我的答案,并描述了它最终是如何为我工作的。
    • 我在 Xcode 11.2.1 (11B500) 中仍然遇到这个问题
    【解决方案4】:

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

    希望它很快会在 Xcode Simulators 中得到修复,我想在此之前我们会遇到错误。

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

    【讨论】:

    • 重置所有内容和设置后,模拟器中仍然会发生这种情况。 Xcode 11.2.1 (11B500)
    猜你喜欢
    • 2014-12-11
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2016-12-03
    相关资源
    最近更新 更多