Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将用户从Google Checkout映射到Android许可响应_Android - Fatal编程技术网

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

将用户从Google Checkout映射到Android许可响应,android,Android,我正在使用Android授权,如下所述: (…以验证我的android应用程序的客户是否实际为该应用程序付费。)我的应用程序在web上有一个服务器组件,为了更安全,我正在该服务器上进行许可证验证 一切正常。现在,我的问题来了。因为每个新用户都会占用我中央服务器上的资源,所以我实际上不太愿意让非付费用户使用。我看到一些证据表明,用户在获得退款后(按照正常的15分钟宽限期)仍在继续使用该应用程序 为了抑制这种行为,如果有办法将谷歌结账时的用户付款映射到我系统中的实际用户,那就太好了。这可能吗 我从

我正在使用Android授权,如下所述:

(…以验证我的android应用程序的客户是否实际为该应用程序付费。)我的应用程序在web上有一个服务器组件,为了更安全,我正在该服务器上进行许可证验证

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

为了抑制这种行为,如果有办法将谷歌结账时的用户付款映射到我系统中的实际用户,那就太好了。这可能吗

我从android许可证服务器收到的ResponseData包含一个名为“userId”的字段,但这似乎与Google Checkout中的任何信息都不对应。(有关响应数据的定义,请参见。)


是否可以确定结帐付款对应于哪个应用程序安装?

据我目前所知,
用户ID
甚至在每个应用程序的基础上都是模糊的,这样您就可以唯一地识别每个应用程序的用户,但无法确定它是哪个用户,也无法确定同一用户是否购买了另一个应用程序

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

  • 应用->服务器:给我一个新的nonce
  • 服务器->应用程序:这是一个安全的随机临时值
  • 应用->许可证服务:使用此安全随机密钥检查用户许可证
  • 许可证服务->应用程序:已签署的许可证响应,包括重复使用nonce
  • 应用程序->服务器:使用密钥检查许可证签名(仅在服务器上)
  • 服务器->应用程序:拒绝或提供随机访问令牌等
  • 在这种情况下,即使用户弄乱了您的LVL检查代码,您也不会对其进行身份验证


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

    我不敢相信这个问题已经被投票两次了,而且在过去九个月里没有得到回答。虽然这可以解释很多。。。不管怎样,你能告诉我们你是如何发现用户在获得退款后继续使用你的应用程序的吗?通过iserId以外的其他数据?Google Play授权信息不应该反映用户获得退款的事实吗?我知道/怀疑我的服务被非付费用户使用的原因是,我在服务器日志中看到,用户注册为新用户,然后使用我的服务45分钟,而在这一天,我实际上根本没有销售(我的应用程序并不那么流行:-)。这不是什么大问题,但我很惊讶,让服务器检查用户是否已付款的明显修复方案是不可能的。查看userId字段,我发现这是Base64加密的,重新设置它会提供如下字符串B@XXXXXXXX,其中X…X是一个8位十六进制数字,类似于某种地址!?有人对此发表评论吗,这能帮助我们识别用户吗?我现在知道一个事实,如果我们在第一天之后取消某个特定订单,一些用户实际上可以免费获得该应用程序!今天刚从谷歌确认,他提到要避免取消超过15分钟延迟的订单!这里也有同样的问题。自从谷歌不再透露客户电子邮件以来,它一直是一个支持雷区。