in-app-billing - 用于应用内支付购买验证的后端服务器

标签 in-app-billing android-inapp-purchase

BillingClient queryPurchases 方法的谷歌文档说明如下:

“出于安全考虑,建议通过调用以下 API 在您的后端(如果有的话)进行购买验证:https://developers.google.com/android-publisher/api-ref/purchases/products/get

这是链接:

https://developer.android.com/reference/com/android/billingclient/api/BillingClient.html#queryPurchases(java.lang.String)

我已经设置了一个 API,从我的服务器建立了与它的通信并进行了一些初步测试,但我对它的研究越多,我就越质疑它的必要性。如果您的代码可以反编译,那么您在后端所做的任何验证都可以在您的应用程序代码中被破坏。

我的理解是谷歌将这些购买缓存在本地设备上并定期刷新缓存,而这个缓存是 queryPurchases 从中提取购买的地方。

通过对这些购买进行后端验证,我到底想阻止哪种类型的攻击?

最佳答案

Google play 处理交易并保留购买记录,您的后端提供购买收据并从 Google 获得响应,用户无法在 Google 的计费系统中注入(inject)虚假记录,这就是您的后端所依赖的,如果用户确实在应用程序项目中购买了您,并且他们的信用卡被谷歌收取费用,那么该记录是可靠的,并且用户无法更改它,即使他们反编译了您的应用程序,除了暴露为一个恶意的 Actor 。在应用程序计费系统中实现良好是无懈可击的,如果不是不可能的话,也是极其困难的。

关于in-app-billing - 用于应用内支付购买验证的后端服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55999385/

相关文章:

android - 如何在kotlin中实现Android in app purchase?

google-play-developer-api - 从试用期开始,paymentState 不会改变

Android 应用内购买降级-升级

android - 在应用计费相同的版本要求

Android应用内结算: How to remove published item from product list?

android - 如何判断我使用的是哪个版本的应用内结算

java - Android 应用内计费 : Start purchase flow when button is pressed

java - skuDetailsList 返回 null

java - 为订阅找回丢失的购买 token

google-api-php-client - 关于如何在服务器上验证 Google In App Purchase 购买 token 的说明?