【问题标题】:Android: how to verify package is genuineAndroid:如何验证包是正版
【发布时间】:2014-06-02 09:33:30
【问题描述】:

在我的一个应用中,我想检测用户是否安装了我的另一个应用。

此代码有效:

    PackageManager pm = mAppContext.getPackageManager();
    try {
        pm.getPackageInfo("com.example.packagename", PackageManager.GET_ACTIVITIES);
        // do something
    } catch (PackageManager.NameNotFoundException e) {
        // nothing to do
    }

但我想知道如何验证用户是否真的从 Google Play 下载了该应用。我想应该可以安装一个包名相同的非正版包吧?

【问题讨论】:

    标签: android google-play package-name


    【解决方案1】:

    PackageManager 有一个方法 getInstallerPackageName,对于给定的包名称,它会为您提供安装程序的名称。对于预加载(除非它们不是从其他“市场”如 SamsungApps 安装的)和自行安装的应用程序将返回 null。对于源自 Google Play 的应用程序,您应该获得 com.android.vending。而且我认为您无法安装清单中声明的​​具有相同包名的两个应用程序。

    【讨论】:

    • 如果正版应用从未安装过,而非正版应用伪造安装程序信息怎么办?
    • “伪造安装程序信息”是什么意思? getInstallerPackageName 返回的值正在由 PackageManager 处理,所以我想,没有办法破解它。
    • 我猜有可能对其中的任何字符串进行恶意硬编码?或者不是?
    • 无法从清单中指定安装程序名称。安装程序包名称由包管理器在安装过程中设置。
    • 之前的“Android Market”或“Google Play”都有“com.android.vending”包名。但我不知道谷歌对未来有什么计划。考虑到有根设备,我认为你应该假设有人可能会改变这一点。您应该从另一个角度描述您的问题,也许还有其他解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多