【问题标题】:How does data in the IOS In App Purchase flow travel exactly?IOS In App Purchase 流程中的数据如何准确传输?
【发布时间】:2016-02-08 10:42:56
【问题描述】:

我正在使用 Ionic(带有 Cordova 购买插件)开发移动应用程序,但这个问题更笼统。我们正在使用应用内购买 (IAP),目前在尝试完成消耗品购买时出现错误。我们现在的流程是这样的:

  • 从 Apple 获取我们的产品列表并在我们的 IAP 页面上呈现
  • 用户点击他们想要的消耗性 IAP,它会向 StoreKit 发送一条消息以启动购买
  • 我们收到响应,其中包含状态设置为已批准的可消耗 IAP 对象。
  • 我们通过回调到我们自己的服务器来启动验证过程,在该服务器上我们点击苹果以验证购买,然后将其登录到我们的数据库并向应用发送 200 响应(不确定我们是否需要发回 IAP 对象这里有我们服务器的收据,还是我们只使用应用程序中已有的收据?)
  • 我们尝试完成购买,但出现错误提示(InAppPurchase[objc]:无法完成交易)

我的问题是假设这是正确的流程,完成方法的作用是什么?查看 Cordova Purchase Plugin 包装器的源代码,我可以看到它将对象的状态设置为完成,但我假设(我找不到发生这种情况的代码)它也与 Apple 对话,以便 Apple 标记购买在他们这边完成了吗?如果我们手动将状态设置为完成,IAP 错误就会消失,但仍然无法多次购买耗材,这对我来说意味着 Apple 也需要关闭它。这是一个正确的假设吗?让这个工作的任何其他提示也将不胜感激。

【问题讨论】:

    标签: ios iphone cordova in-app-purchase ionic-framework


    【解决方案1】:

    我不确定cordova如何处理IAP,但在苹果方面,交易需要通过调用finishTransaction来完成。看来这一步是行不通的。

    由于延迟到服务器验证而可能发生的一件事是原始事务对象已过期,并且使用它调用 finishTransaction 什么都不做。此时您可能可以在以下位置搜索您的交易:[[SKPaymentQueue defaultQueue] transactions]

    如果您可以从那里获取它然后调用 finishTransaction 那么它应该可以工作。不知道你是如何用cordova做到这一点的,但我希望这会有所帮助。

    【讨论】:

    • 感谢您的回答。是的,它确实是失败的 finishTransaction 方法。我可以看到排队等候的交易。明天再看看你提到的过期问题。
    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 2016-03-15
    • 2021-02-15
    • 2014-06-15
    • 1970-01-01
    • 2017-05-29
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多