作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如果我实现 Apple 的 VerificationController.m 示例,是否还需要进行服务器端收据验证?此外,如果您做服务器端,那么似乎没有理由实现 VerificationController.m,因为您没有从设备联系 Apple 的服务器。
最好的情况是,我宁愿只实现 VerificationController.m,因为我没有运行自己的 https 服务器的好方法。够了吗?该应用程序在 iOS 5+ 上运行
最佳答案
这比它第一次出现时更棘手,所以我可能会弄错,但这里是:
最初的攻击依赖于 iOS ≤ 5.x 中的两个弱点:
这允许用户/攻击者伪装成 App Store 服务器并出示有效收据以供其他人购买。
VerificationController 无法修复第一个弱点(它无法改变 StoreKit 与 Apple 的通信方式);它主要只是修复第二个。它似乎还检查了比应该需要的更多的东西(但我在这里可能完全错了),包括一些 StoreKit 可能已经检查过的东西。
客户端验证无法防止有人入侵客户端,这在越狱手机上非常容易。如果所购买的东西可以同样容易地被黑客入侵(例如游戏弹药/关闭广告),这就不是真正的问题。
当服务器提供所购买的东西(例如 DLC/Skype 信用/FarmCoins)时,服务器端验证是可取的。
一般情况下,在将收据转换为购买的商品时进行验证。
不过,VerificationController 存在一些问题:
//Validation suceeded。在此处解锁内容。
如果收据验证连接失败,这很容易在 3G 连接不良时发生。这对于非消耗性交易来说可能不是问题(我认为恢复的交易会得到一个新的交易 ID),但这意味着消耗性交易会永远丢失。您可以推迟调用 -[SKPaymentQueue finishTransaction:]
直到收据验证成功,但这会在队列中留下不完整的交易——希望它们最终过期而不向用户收费。-connection:didReceiveData:
返回所有响应数据。这可能适用于服务器和 NSURLConnection 的实现细节,但依赖它是不明智的。关于ios - 服务器回执验证还是苹果的VerificationController.m?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392524/
我是一名优秀的程序员,十分优秀!