iOS InApp购买收据验证iOS 7

4

我已经阅读了苹果的文档几次,但并没有从中得到太多收获。因此,我希望这里有人知道如何处理收据验证:

我知道在 iOS 6 之前存在问题。但是在 iOS 7 上现在是否需要进行收据验证?它真的增加了额外的安全性吗?如果苹果更改其收据格式(在设备上解析它们),似乎会引起问题。


请参考 https://github.com/rmaddy/VerifyStoreReceiptiOS。 - rmaddy
那么,我猜你的意思是,因为你自己开发了一个相关框架,所以仍然有必要这样做? - Max
@RubberDuck 文档之所以含糊不清是有原因的。如果它被清晰地记录下来,每个人都会完全按照它实现,黑客很容易就能让它失去作用。通过让每个人自己解决最终细节问题,可以使它对每个人更加安全。我发布的这个类解决了90%的工作量。 - rmaddy
2
@rmaddy。很抱歉,我知道黑客会高兴如果每个人都使用相同的方法,但是你可以将一个方法作为示例并说:这些是您必须遵循的步骤来验证捆绑包。这些是您必须遵循的步骤来验证iapp。这是这种和那种方法所做的。现在去创造你自己的方法。没有任何解释。您必须弄清楚要做什么以及如何做。我确信,对于每个实现验证的人来说,要做的事情都是相同的。他们唯一需要改变的是如何做。 - Duck
我仍然不知道如何确切地处理它,所以我不得不同意RubberDuck:/ - Max
显示剩余2条评论
2个回答

3
在我所见过的情况中,iOS7 并没有改变是否需要进行收据验证的必要性,只是让收据验证成为可能。iOS7 已经在设备上启用了收据验证(例如,参见上面来自https://stackoverflow.com/users/1226963/rmaddy 的链接,以及A complete solution to LOCALLY validate an in-app receipts and bundle receipts on iOS 7)。
在设备上进行收据验证是否增加了额外的安全性呢?在我看来,是的。这为您提供了另一个工具,用于保护您的购买。在我的应用程序(尚未发布)中,我想支持 iOS6 和 iOS7,因此我决定使用后端服务器来对 iOS6 进行收据验证。而且,由于我已经准备好了该服务器,对于 iOS7 收据,我首先进行设备上的验证,如果成功,则进行服务器验证作为第二个检查。
无论您是否在iOS5、iOS6、iOS7等版本中进行收据验证,这实际上取决于您对安全性的重视程度。如果您没有太多安全需求,那么为什么要花费太多时间来处理安全问题呢?如果您确实需要,那就做更多的工作。
如果苹果改变了收据的格式怎么办?当然,这种情况可能会发生。考虑到iOS6到iOS7的变化已经大幅重构了收据和应用内购买,因此我们应该预计iOS8也会再次进行调整。这是未来的事情。现在我们要处理当前的问题。

对于iOS 7,如何在服务器端检查特定的IAP是否有效? 有没有一些基本的PHP代码可以查看?我现在正在与这个问题苦苦挣扎... :/ - Vrasidas
我担心的是,用户购买了某些东西,但收据验证失败(由于任何原因)。所以,在这种情况下,用户什么也得不到,但钱已被扣走了,对吧? 如何避免这种情况发生? - Max
1
我也很好奇。在iOS7中,进行设备内收据验证后,如果验证失败,苹果建议您刷新收据(SKReceiptRefreshRequest),然后再次尝试验证。现在,如果刷新后仍然无法通过验证,该怎么办?在我的代码中(还没有上架应用商店),我会要求用户联系客户支持(即我)。至于服务器端验证失败的情况(例如,在iOS6),好像我们无能为力...但是我愿意听取建议! - Chris Prince

0

收据验证并非必须,但在以下情况下需要:

  • 在自动续订订阅购买后,为了获取到期日期。
  • 当恢复应用内购买时。如果用户重新安装了应用程序或从新设备启动了它,则必须提供一种机制来恢复他的购买并让他访问已经支付的功能。
  • 几年前,越狱常见,开发人员使用验证收据来验证付款是否被黑客攻击 - 我相信那些日子已经过去了,现在不再那么必要。

这是我们博客中关于App Store收据验证的完整FAQ:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接