iOS inapp购买订阅服务器端验证安全性

时间:2017-11-02 15:32:21

标签: ios in-app-purchase

应用程序的逻辑。 您使用登录密码注册。然后,如果您没有订阅(由服务器检查),请转到“购买订阅页面”。

问题。 我注册了user1。买订阅。 token1进入服务器。 我注册了user2。由于他没有订阅,他进入“购买订阅页面”,点击“购买”,苹果说“你已经买了订阅”并给出了token2(为什么它会给出不同的令牌?)

var receiptUrl = NSData.FromUrl(NSBundle.MainBundle.AppStoreReceiptUrl);
return receiptUrl.GetBase64EncodedString(NSDataBase64EncodingOptions.None);

token2转到服务器。因此,我们有1个购买订阅,但有2个用户使用相同的订阅。 有没有办法识别用户的iTunes?保存令牌,并能够检查itunes用户是否已经为某个服务器端帐户购买了订阅

1 个答案:

答案 0 :(得分:1)

这是StoreKit收据中的一个基本问题,我认为大多数开发人员都没有意识到这一点。

问题在于Apple没有为开发人员提供识别收据属于哪个iTunes帐户的方法。这使得用户与其他用户共享iTunes凭据并解锁订阅变得微不足道。

处理此问题的正确方法是在数据库中存储Apple transaction_id响应中的实际verifyReceipt,并确保它在您的数据库中是唯一的。这是很多工作,所以可能不值得。

有时,您希望iTunes帐户可以与不同的应用程序端帐户一起使用,这使事情变得更加复杂。例如,如果用户创建帐户并购买订阅,则允许订阅过期,然后稍后创建新帐户并尝试再次购买,即使多个帐户现在正在使用相同的收据,也应该允许该帐户。

如果您不想处理它,I have a service会自动处理所有这些边缘情况。