in-app-purchase - 如何验证 Apple 订阅优惠是否已成功兑换给活跃订阅的用户
问题描述
我们正在我们的应用程序中实施订阅优惠,一切进展顺利。但是,如果用户在兑换优惠时拥有有效订阅,我们会从支付队列中获得失败的交易,尽管系统弹出窗口显示“您已准备就绪”。
我不知道它是否记录在任何地方,但我认为在这种情况下失败的交易表明,该用户没有被收费。然而,这令人困惑——毕竟,我们怎么知道用户是否成功兑换了优惠?
更重要的是,失败事务的错误属性,预期用于“确定发生了什么”实际上是nil。我想将没有错误视为间接证据,表明交易实际上是成功的,但我还没有看到任何支持这一假设的文件。
我意识到订阅优惠是最近才推出的,但也许我们在这里遗漏了一些东西?
更新:在 Mac上看起来transaction.error
and为零,但在 iPad 上(对于相同的测试帐户)为现有订阅者提供,尽管在后一种情况下错误消息仍然含糊不清:transaction.payment.paymentDiscount
错误域=SKErrorDomain 代码=0 "无法连接到 iTunes Store" UserInfo={NSLocalizedDescription=无法连接到 iTunes Store}
解决方案
所以这只是沙盒的一个怪癖。活跃订阅的跨级从未在 Sandbox 上正常工作,而且他们实际上仍然没有提供优惠。虽然,他们在生产上工作得很好。
但是,您仍然应该能够测试过期订阅的优惠。因此,一旦帐户在该产品中完成了一个周期,它应该可以工作。
您可能想查看此博客文章。
如何向用户收费取决于一系列因素。
推荐阅读
- rest - 如何在 Drupal 8 中对自定义插件(资源)自动应用更改更改
- mobile - P2P messaging over internet
- php - 动态产品列表页面php
- php - Laravel 5.7.28 覆盖 getAuthPassword 仍然会引发未定义的索引:密码
- c# - 异步运行 C# WPF 事件
- batch-file - 如何在不转到每个窗口并执行 CTRL + C 的情况下终止许多生成的进程?
- assembly - 如何获得没有 NUL 字节的 objdump?
- javascript - 创建没有任何父级的树结构作为来自一级对象列表的输入
- google-apps-script - Open cell for editing in Google Sheets
- video - ffmpeg 从 m3u8 中选择特定语言的最高质量视频轨道和音频轨道