将用户从Google Checkout映射到Android许可响应

avl*_*den 6 android

我正在使用Android许可,如下所述:

http://developer.android.com/guide/market/licensing/index.html

(...验证我的Android应用程序的客户是否实际支付了应用程序.)我的应用程序在Web上有一个服务器组件,为了更加安全,我正在此服务器上进行许可证验证.

一切正常.现在,我的问题.由于每个新用户都占用了我的中央服务器上的资源,我实际上不愿意让非付费用户.我已经看到一些证据表明用户在获得退款后继续使用该应用程序(按照正常的15分钟宽限期).

为了遏制这种行为,如果有某种方法可以将Google Checkout上的用户付款映射到我系统中的实际用户,那就太棒了.这可能吗?

我从android许可证服务器收到的ResponseData包含一个名为"userId"的字段,但这似乎与Google Checkout中的任何信息都不对应.(有关ResponseData的定义,请参阅http://www.androidadb.com/source/skylight1-read-only/GoogleLVL/src/com/android/vending/licensing/ResponseData.java.html.)

是否可以确定Checkout中哪个付款映射到哪个应用安装?

cla*_*ker 2

据我目前的了解,userId即使在每个应用程序的基础上,它也会被混淆,这样您就可以唯一地识别每个应用程序的用户,但无法确定它是哪个用户,也无法确定同一用户是否购买了另一个应用程序。

但我不确定您是否真的需要根据 来识别这些客户userId。如果您有服务器正在运行,保护您的应用程序的最佳方法是让您的服务器检查许可证。

  1. 应用程序 -> 服务器:给我一个新的随机数
  2. 服务器 -> 应用程序:这是一个安全的随机数
  3. 应用程序 -> 许可证服务:使用此安全随机数检查用户许可证
  4. 许可证服务 -> 应用程序:签名的许可证响应,包括重复的随机数
  5. 应用程序 -> 服务器:使用密钥检查许可证签名(仅在服务器上)
  6. 服务器 -> 应用程序:拒绝,或提供随机令牌进行访问等

在这种情况下,即使用户弄乱了您的 LVL 检查代码,您也不会验证用户身份。

但是,如果您不注意步骤,您当然可能会在第 6 步之后引入漏洞。不过,如果您当前正在使用标准 LVL 代码和应用程​​序端许可证检查以及存储在应用程序中的密钥,则更改为上面概述的机制将是一个巨大的改进(甚至有一个脚本可以删除标准 LVL 检查代码)来自应用程序)。