android - 检查是否安装了付费应用

标签 android eclipse

我已经创建了一个android应用程序,还有一个可以在常规应用程序中打开一些功能的付费 key 应用程序。 我尝试使用此代码来检查是否安装了付费 key :

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 时,它在我的手机上运行(我想我导出了它们。也许是直接使用“运行”/“调试”。我不记得了)。但是当我将它们上传到 Google Play 时 - 我收到一位用户的消息,说他购买了 key ,但功能仍然被阻止。 我做错了什么吗?那些签名到底是什么?当我导出 APK 时,它是否与别名和 keystore 有任何关系?

最佳答案

调试 key 是从 IDE 运行时使用的默认 key ,因此在测试时,它们都使用相同的 key 。但是您使用商店的不同 key 对它们进行了签名,因此签名将不匹配。

正如@NobuGames 在评论中提到的那样,此时您已经发布了这两个应用程序,您可以更新免费应用程序以使用硬编码字符串检查付费应用程序的 key 哈希。从理论上讲,这可能会使某人更容易制作您的应用程序的高级解锁盗版版本,尽管如果他们深入研究您的源代码,我怀疑他们无论如何都会成功。认为这是一个很好的问题(流行的应用程序足以让盗版者花那么多时间来破解你的应用程序)。

关于android - 检查是否安装了付费应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29613303/

相关文章:

java - Mac 终端 : Could not find or load main class CLASSNAME

java - 我如何/我可以从 Eclipse 升级 Java?

Android Studio 无法选择构建变体

android - FragmentManager.findFragmentByTag 返回 null

java - Android 代码 NPE 错误 : java. lang.RuntimeException:无法启动 Activity ComponentInfo

Eclipse:Web inf/lib 上的 App Engine SDK JAR

javascript - Eclipse 大纲 View - Eclipse 中可见的 JavaScript 类别?

android - 使用 smack 'XMPPError: service-unavailable - cancel' 传输文件失败

android - 回去两个 Activity ?

android - 为什么目标 friend 没有收到我的 Facebook AppInviteDialog 请求?