我正在使用 Android 许可,如下所述:
http://developer.android.com/guide/market/licensing/index.html http://developer.android.com/guide/market/licensing/index.html
(...验证我的 Android 应用程序的客户是否确实为该应用程序付费。)我的应用程序在网络上有一个服务器组件,为了额外的安全性,我在此服务器上进行许可证验证。
一切正常。现在,我的问题。由于每个新用户都会占用我的中央服务器上的资源,因此我实际上有点不愿意拥有非付费用户。我看到一些证据表明用户在获得退款后继续使用该应用程序(按照正常的 15 分钟宽限期)。
为了遏制这种行为,如果有某种方法可以将 Google Checkout 上的用户付款映射到我系统中的实际用户,那就太好了。这可能吗?
我从 android 许可证服务器收到的 ResponseData 包含一个名为“userId”的字段,但这似乎与 Google Checkout 中的任何信息都不对应。 (看http://www.androidadb.com/source/skylight1-read-only/GoogleLVL/src/com/android/vending/licensing/ResponseData.java.html http://www.androidadb.com/source/skylight1-read-only/GoogleLVL/src/com/android/vending/licensing/ResponseData.java.html用于 ResponseData 的定义。)
是否可以确定 Checkout 中的哪项付款映射到哪一个应用程序安装?
据我目前了解,userId
即使在每个应用程序的基础上,它也会被混淆,这样您就可以唯一地识别每个应用程序的用户,但无法确定它是哪个用户,也无法确定同一用户是否购买了另一个应用程序。
但我不确定您是否真的需要根据以下内容来识别这些客户userId
。如果您有服务器正在运行,保护您的应用程序的最佳方法是让您的服务器检查许可证。
- 应用程序 -> 服务器:给我一个新的随机数
- 服务器 -> 应用程序:这是一个安全的随机数
- 应用程序 -> 许可证服务:使用此安全随机数检查用户许可证
- 许可证服务 -> 应用程序:签名的许可证响应,包括重复的随机数
- 应用程序 -> 服务器:使用密钥检查许可证签名(仅在服务器上)
- 服务器 -> 应用程序:拒绝,或提供随机令牌进行访问等
在这种情况下,即使用户弄乱了您的 LVL 检查代码,您也不会验证用户身份。
但是,如果您不注意步骤,您当然可能会在第 6 步之后引入漏洞。不过,如果您当前正在使用标准 LVL 代码和应用程序端许可证检查以及应用程序中存储的密钥,则更改为上面概述的机制将是一个不错的选择。huge改进(甚至有一个脚本可以从应用程序中删除标准 LVL 检查代码)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)