13

我最近发现了 BlackMarket 应用程序,它是 Google Play-Store 应用程序的翻版,这些人从 Play-Store 获取付费应用程序,让他们的用户下载并免费使用它。

作为一个计划为我的应用程序收费的开发人员,这让我很困扰,我想确保我的应用程序是通过 Play-Store 或我认可的任何商店安装的。

我想验证这类事情的唯一方法是通过活动跟踪,但自从 Google Analytics v2 以来,活动的跟踪是在 Jar 中的接收器中完成的。

有没有其他方法可以确定我的应用程序安装的来源?有没有办法拦截活动跟踪数据?

谢谢。

4

3 回答 3

9

在此处查看此链接。然后

PackageManager pm = getPackageManager();
String installationSource = pm.getInstallerPackageName(getPackageName());

从标记安装时,installationSource将返回类似com.google.android%or的内容com.android.vending%。但是,这会发生变化,您必须在发生更改时维护(支持)它 - 否则它将返回 null (来自调试器)或其他一些包名称,来自其他应用程序(不想要的应用程序:))

于 2013-08-09T22:14:57.760 回答
1

我发现了解应用程序是否来自 Play 商店的最佳方法是 g00dy 建议的:使用安装程序包名称。

String packageName = appContext.getPackageName();
String installerPackage = appContext.getPackageManager().getInstallerPackageName(packageName);

如果应用程序是在 Play 商店中下载的(即使应用程序是使用 PC 购买的),installerPackage则应为“com.vending.google”。

于 2013-08-01T14:07:10.353 回答
0

我找到了这个 http://developer.android.com/google/play/licensing/licensing-reference.html#lvl-summary

public boolean allowAccess() {
    long ts = System.currentTimeMillis();
    if (mLastResponse == LicenseResponse.LICENSED) {
        // Check if the LICENSED response occurred within the validity timeout.
        if (ts <= mValidityTimestamp) {
            // Cached LICENSED response is still valid.
            return true;
        }
    } else if (mLastResponse == LicenseResponse.RETRY &&
                ts < mLastResponseTime + MILLIS_PER_MINUTE) {
        // Only allow access if we are within the retry period or we haven't used up our
        // max retries.
        return (ts <= mRetryUntil || mRetryCount <= mMaxRetries);
    }
    return false;
}
于 2013-09-19T10:53:27.210 回答