使用Google Checkout Polling API验证Android应用内购买时出现延迟
作者:互联网
我正在尝试使用Google Checkout API从我的服务器验证Android应用内购买.根据此其他查询(App on Android market – HTTP notifications don’t come),我没有回调,因此我正在使用轮询API.
它工作正常,除了我可以在民意测验收到有关购买的通知之前延迟5或6分钟,即使登录到浏览器中的商户帐户的用户已经可以看到所有信息.查看API文档,这意味着可能需要更长的时间,因为它指出“使用轮询API,您可以检索不到180天且至少30分钟的所有通知”.
这种延误是典型的吗(我在英国)?还是建议使用轮询API来验证Android应用内购买吗?
解决方法:
我认为,尝试通过服务器上的Google Checkout轮询API验证GP LVL和/或IAB信息不是最佳方法.如果您有服务器,还有更好的选择.
如文章Securing Android LVL Applications中所述,最好的方法是在受信任的服务器上验证许可证信息.它是这样的:
>不要使用Google演示代码; it is not robust (does not check for all error conditions),甚至可以用伪造响应之类的脚本替换(尽管,如果您按以下方式实现服务器端检查,则还是无关紧要的).直接使用com.android.vending.licensing.请勿在您的应用程序中包含Google Developer Console应用程序密钥,您在那里不需要它.
>您的应用向您的服务器询问ILicensingService.checkLicense()调用的随机数.您的服务器会为您的应用提供安全的随机随机数.您的应用使用该随机数调用ILicensingService.checkLicense().
> Android GP LVL Servce通过ILicenseResultListener.verifyLicense()回调您的应用,复制签名的数据和签名. (提示:已签名的数据包含随机数,因此此处甚至无法进行重放攻击.)
>您的应用将签名的数据以及签名传递到服务器.
>您的服务器是唯一知道您的Google Developer Console应用程序密钥的实例.它根据签名的数据验证签名.
>验证结果将有助于您做出有关访问服务器数据的身份验证决定.
>确保您不经常检查许可证. Google希望您遵守许可回复随附的有效时间戳(他们声称该时间戳甚至反映了15分钟的退款期限).显然,只有将有效性存储在服务器端并且服务器允许应用程序跳过步骤2中的测试,这才是安全的.
唯一的区别是,IAB也是如此.不幸的是,IAB V3不适用于getPurchases()的随机数.原因可能是the IAB Service itself (and not just the Google app-side reference code) uses caching extensively.不过,对于购买,您可以将developerPayload传递给com.android.vending.billing.IInAppBillingService.getBuyIntent(),它将包含在getPurchases()返回的签名数据中.因此,只要您没有应用内购买的到期条件或某种隐式(基于时间)或服务器管理的显式到期条件,该API仍然足够安全;然后服务器将要求应用程序消费过期的物品,即使失败,也不是问题,因为服务器仍然知道该信息,并且可以要求应用程序一次又一次地消费这些物品.
我希望我可以对此主题有所启发.
标签:android,google-checkout,api,in-app-purchase 来源: https://codeday.me/bug/20191011/1895026.html