我已经创建了一个Android应用程序,还有一个付费密钥应用程序,可以在常规应用程序中打开一些功能。 我尝试使用此代码检查是否已安装付费密钥:
protected static boolean isProInstalled(Context context) {
PackageManager manager = context.getPackageManager();
if (manager.checkSignatures(context.getPackageName(), "com.myapps.appkey")
== PackageManager.SIGNATURE_MATCH) {
//Pro key installed, and signatures match
return true;
}
return false;
}
当我安装从Eclipse导出的两个APK时,它在我的手机上工作(我想我已导出它们。也许它直接用"运行" /" debug"。我不记得了)。但是当我将它们上传到Google Play时 - 我收到了一条用户的消息,说他买了钥匙,但功能仍然被阻止。 有什么我做错了吗?那些签名到底是什么?导出APK时,它是否包含别名和密钥库?
答案 0 :(得分:2)
调试密钥是从IDE运行时使用的默认密钥,因此在测试时,它们都使用相同的密钥。但是您使用商店的不同密钥对它们进行了签名,因此签名将不匹配。
正如@NobuGames在评论中提到的那样,此时您已经发布了这两个应用程序,您可以使用硬编码字符串更新免费应用程序以检查付费应用程序的密钥哈希值。从理论上讲,这可能会让某人更容易为您的应用制作高级解锁的盗版版本,但如果他们正在深入挖掘您的源代码,我怀疑他们无论如何都会成功。可以认为这是一个很好的问题(足够流行的应用程序让海盗花费那么多时间来攻击你的)。