我一直在开发一款已经发布到Google Play的Android应用程序。对于下一次更新(版本代码=3),我的客户希望包括LVL许可方案。
我做的第一件事是从许可服务器设置一个静态测试响应。我将测试响应设置为许可。阅读文档后:
此许可证测试响应将使用[我的电子邮件地址]发送到设备或上面列出的您已上传到Google Play的应用程序的测试帐户。>此外,此帐户(但不是测试帐户)将收到尚未上传到Google Play的>应用程序的响应。
我想,没问题,因为我的开发者帐户电子邮件与我的测试设备上的Google Play帐户电子邮件相同。因此,我应该在调试应用程序时收到测试响应。
之后,我阅读了所有其他许可文档和示例代码,并将其集成到应用程序中。我使用了一个ServerManagedPolicy,其中包含正确的base64公钥和20个随机生成的字节作为salt。
一旦一切看起来都很好,我就把它上传到设备上进行测试,但我并没有收到预期的许可响应,而是总是收到NOT_LICENSED的响应。我回去确保:
- 我连接到了互联网
- 我在Google Play上登录了我的开发者帐户
- LicenseChecker使用了正确的公钥
- 正在清除我的Google Play缓存
起初,我认为这可能与缓存有关,所以我尝试使用StrictPolicy。同样的回应。由于我没有从商店购买该应用程序,我的印象是授权服务器响应正常,而不是发送静态测试响应。以下是我尝试过的其他一些东西:
- 等待24小时后重试
- 尝试使用android调试密钥以及当前分发密钥构建应用程序
- 在Google Play上设置和使用不同的测试用户帐户。我确保将此电子邮件帐户添加到开发人员控制台的"测试帐户"部分
- 将APK上传到Google Play,但不发布
- 将版本代码从2增加到3。这很有趣,因为它没有响应NOT_LICENSED,而是返回"应用程序错误代码">error_NOT_MARKET_MANAGED
这让我相信许可证服务器总是正常响应,而不是将我设置的静态测试响应发送到我的开发人员帐户。我有一种感觉,这可能是因为应用程序已经发布,但我不能冒险发布调试版本来测试它是否有效。
以前有人遇到过这种情况吗?非常感谢您的帮助。
我遇到了同样的问题,但还是解决了1) 在我的设备上,我删除了除了我配置的测试帐户之外的所有谷歌帐户。显然,play商店仍在尝试使用非测试帐户。
2) 我不得不为我的开发人员帐户激活测试状态,尽管我是主要的开发人员和唯一的测试人员。
版本增量的事情没有帮助,老实说是分散了注意力。。。。。
我花了几个小时甚至几天的时间处理同样的问题,这里和其他地方都有记录,预发布的许可证测试是偶然的,而且我发现的错误比偶然的多。
我发现,让它"更可靠"(但仍然不完全可靠)工作的唯一方法是拥有一个重置为出厂默认值的硬件设备,然后将其PRIMARY谷歌用户设置为与您上传应用程序进行测试的开发帐户相同的用户。
特殊的AVD也不是很可靠。
在使用LVL库进行测试时,我也遇到了同样的问题。无论我在设置页面中将License Test response设置为什么,我都会得到561(0x231 NOT_LICENSED)响应。
我的付费应用程序用户似乎没有抱怨,所以我认为LVL正在为他们工作。
起初,我的一个应用程序出现了这个问题,1天后就消失了(2012年12月30日发布),现在我在该应用程序中得到了有效的测试响应。
然而,我仍然得到了更新应用程序(2013年1月31日发布)的561(0x231 NOT_LICENSED)响应
所以现在我只是在发布APK后注释掉(禁用561弹出的警报对话框代码),并继续为下一个版本进行开发。
我在再次发布之前取消评论(启用警报对话框代码)!
我联系了Google Play,他们推荐我去他们的开发者论坛。我在那里发了同样的问题,但后来我找不到我的帖子了。
很高兴知道我不是唯一一个面临这个问题的人。
我不确定我是否在添加任何新内容,但在应该发生的事情和正在发生的事情上有类似的问题和挫折,我会提供这个似乎有效的方法:1)删除Play控制台的许可证测试用户列表中的所有用户;2) 无论你正在测试什么设备,都会删除所有的谷歌帐户;3) 在同一设备上创建新的、唯一的Google帐户(例如。,iamalicensetester@gmail.com);4) 将该Google帐户添加到Play Console许可证测试用户列表中。
我认为可能发生的情况是,如果你在一台设备上有多个帐户,并且其中一个帐户获得了许可,那么同一台设备(或其他设备)的非许可帐户将继承该特性。我的这个想法只是一个模型(所有的模型都是错误的,但有些是有用的),(主要)让我回到测试工作。。。以及(部分)有办法向自己解释这种无稽之谈。
我确实试过上面提到的大部分东西。。。清除缓存、存储等等——你可能会认为谷歌想要一个更好的带有仪表板的设施,但不知道这是否在他们的雷达上。我的意思是,收入,对吧?
我也遇到了这个问题,我在这里给出了一些可以帮助您解决它的建议:
- 清除Google Play缓存->无关紧要
- 保管应用程序的签名密钥:
- 如果您将应用程序上传到Play商店,则必须使用密钥对其进行签名-确保这与您正在调试的应用程序也已签名的密钥相同
- 在Play控制台中,有两个地方可以配置测试响应-">测试许可证";部分用于所有应用程序和">应用程序完整性";应用程序特定页面下的部分。我的实验使我得出结论;应用程序完整性";设置的优先级高于所有应用程序的常规设置,甚至更高:常规设置根本不起作用。如果未设置完整性测试,则将其设置为licensed/not-licensed总是返回not licensed。然而,如果它们存在,则响应紧随其后(而不是来自一般部分的响应)
注意:应用程序完整性设置来自必须打开的integrity Developer API