了解iOS中的收据验证和收据刷新

时间:2015-12-03 19:38:22

标签: ios receipt-validation

我们完全了解iOS中的收据验证流程。

以下是我们目前的工作(开发中):

applicationDidFinishLaunchingapplicationWillEnterForeground我们验证服务器端的收据,如果没有收据或收据无效,我们会尝试刷新收据并重新验证。

以下是一些问题/解答:

  1. 设备上没有可用收据的情况是什么?

  2. 我们是否应该在没有收据时发出收据刷新请求?

  3. 为什么启动时有时会显示此警告框?我明白这是在收据刷新请求上显示的吗?

  4. Sign in required?

    1. 收据验证何时发生?我们目前只是在购买时验证购买,这是正确的用法吗?

4 个答案:

答案 0 :(得分:12)

  1. 在制作过程中,设备上始终有收据。在测试之后 第一次安装没有。所以,如果你想做一个正确的测试, 即使在测试中该用户不存在购买,您也必须恢复购买 环境。这是为什么?从appstore下载的应用程序即使是免费的,也会随附收据。
  2. 取决于您要应用的业务逻辑。如果您在每次使用启动应用程序时验证服务器的收据,当然您需要收据。如果它不存在(但在生产中总是)或无效,你可以要求刷新或恢复,但据我记得你应该总是先问用户他/她是否想这样做(可以是拒绝的理由)。 恢复和刷新不是一回事。
  3. 这通常出现在购买/恢复/刷新中。但是如果该帐户有一些待处理请求,因为应用程序已崩溃或您在请求结束之前以某种方式中断了调试,您将会厌烦很多。没有办法以编程方式刷新它们,只需登录直到它们停止。当然,这不是一个有效的测试。
  4. 这取决于您和购买的类型。如果是可自动更新的订阅,您可以针对服务器验证收据,然后将“结束日期”存储在客户端上,并在日期过期后再次进行检查。注意收据可能很大,因为它也有历史价值。

答案 1 :(得分:2)

  1. 正如张所提到的,如果没有购买或恢复,商店将没有收据
  2. 找到收据。如果未找到收据,则验证失败,您不应再次请求收据刷新。只有当您自己恢复处理时,才应再次请求收据。
  3. 当您尝试刷新收据时,将始终显示此信息(或者您将从15分钟内不想要密码的设置中选择。)
  4. 有关详细信息,请查看此处: https://www.objc.io/issues/17-security/receipt-validation/#about-validation

答案 2 :(得分:0)

1.没有购买/恢复。
2.Nope.See 1
4.Sure。对于消耗品,请记住在服务器上保存哈希值,以便击败重播攻击。

答案 3 :(得分:0)

如果用户从App Store下载了该应用程序–是的,收据始终存在。

但是,在沙箱中,如果您的应用是通过Xcode或Testflight安装的,那么在您进行购买或恢复之前不会有收据。

在我们的博客中查看有关收据验证的完整FAQ:

https://blog.apphud.com/receipt-validation/