iOS 应用内购买订阅服务器端验证安全性

标签 ios in-app-purchase

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

问题。 我注册用户 1。购买订阅。 token1 转到服务器。 我注册用户2。因为他没有订阅,所以他去了“购买订阅页面”,点击“购买”,苹果说“你已经购买了订阅”并给了 token2(为什么它给不同的 token ?)

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

token2 进入服务器。结果,我们有 1 个购买的订阅,但有 2 个用户使用相同的订阅。 有什么方法可以识别用户的iTunes吗?保存 token 并能够检查该 iTunes 用户是否已经为某些服务器端帐户购买了订阅

最佳答案

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

问题是 Apple 没有为开发人员提供一种方法来识别收据属于哪个 iTunes 帐户。这使得用户可以轻松地与其他用户分享他们的 iTunes 凭据并解锁订阅。

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

有时,您希望 iTunes 帐户可用于不同的应用端帐户,这使情况变得更加复杂。例如,如果用户创建一个帐户并购买订阅,让订阅过期,然后创建一个新帐户并尝试再次购买,即使同一张收据现在被多个帐户使用,也应该被允许。

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

关于iOS 应用内购买订阅服务器端验证安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079058/

相关文章:

ios - SKScene 中的 AdMob 奖励视频

ios - 最初如何隐藏 UITableview 页脚 View ?

ios - 如果 Objective-C 文件包含 Project-Swift.h 的导入,如何将其导入到桥接 header

安卓内购 : Handle already buyed items

ios - 使用 Parse iOS SDK 检查用户是否具有有效的自动续订订阅

ios - 在 UIImage 的非透明像素周围添加边框和阴影

ios - iOS 下载应用程序时的通知

iOS 应用程序到 MacOS 错误 : 'transactionReceipt' is unavailable: not available on macCatalyst

ios - 点击购买后重复调用addTransactionObserver

ios - 拒绝二进制文件后重新提交应用内购买。