检查应用内支付项目是否已购买

Check whether in-app payment item has been purchased

我现在花了大约 24 小时来实施 Apple 的 StoreKit IAP 系统。 3 小时后,我让 "purchasing" 自己开始工作,但最后 21 个小时我浪费在实施所有收据通信上。现在我正在努力让 openSSL 工作(一些位码编译器错误)并且我到了放弃的地步。

我不关心有人破解我的应用程序或类似的事情,所以有没有一种简单的方法可以只询问 App Store 服务器是否进行了应用程序内购买?没有任何加密、密钥、证书等?

流程是这样的:

因此,如果您知道实现此目的的简单方法,请告诉我。我注意到在使用测试帐户购买(非消耗品)产品后,弹出窗口会告诉您您之前已经购买过该产品。也许这可以用于此目的?

对于现在相当非正式的发帖方式,我深表歉意,但这是我第一次认为 Google 在 Android 上的表现比 Apple 在 [=44 上的表现更好=].无论如何,几乎每个应用程序都有漏洞,Google 的系统远非防弹,但归根结底,如果破解者需要 10 分钟或 2 小时来操作应用程序,那会有什么不同?

我花了大约 1 小时才在我的 Android 应用程序中使用应用程序付款,但 Apple 在这里的要求是荒谬的。他们的 "instructions" 一点帮助都没有,就好像他们想把如何实施这一切保密,你得猜一猜。

如果你不想检查收据,你只需要实现 SKPaymentTransactionObserver 协议,并使用 SKPaymentQueueaddTransactionObserver 添加你实现它的任何对象作为观察者].理想情况下,您希望尽早在您的 App Delegate 中完成此操作,以确保您在启动时收到发送到您的应用程序的任何交易(这对订阅来说最重要)。

paymentQueue:updatedTransactions:方法中,检查每笔交易的transactionState。如果是 SKPaymentTransactionStatePurchasedSKPaymentTransactionStateRestored,则购买(应该)有效。然后,您可以将状态存储在 NSUserDefaults 或数据库中。

别忘了恢复购买。

这非常有效,但是任何越狱设备并安装绕过 IAP 的软件的人都将免费获得 IAP:它不需要特定于您的应用,他们只是 return "purchased" 适用于任何 IAP。