Убедитесь, что приложение Android установлено из Play-Store
Недавно я обнаружил приложение BlackMarket, это приложение из Google Play-Store, в котором эти люди берут платное приложение из Play-Store и позволяют своим пользователям загружать его и использовать его бесплатно.
Как разработчик, который планирует взимать плату за мое приложение, это беспокоит меня, и я хотел бы убедиться, что мое приложение было установлено через Play-Store или в любом магазине, который я одобряю.
Я предполагаю, что единственный способ проверить такие вещи - отслеживать кампании, но поскольку Google analytics v2 отслеживает кампанию в приемнике в Jar.
Есть ли другой способ определить происхождение установки моего приложения?
Есть ли способ перехватить данные отслеживания кампании?
Спасибо.
Ответы
Ответ 1
Проверьте эту ссылку здесь. Тогда
PackageManager pm = getPackageManager();
String installationSource = pm.getInstallerPackageName(getPackageName());
При установке из отмеченного, installationSource
вернет что-то вроде com.google.android%
или com.android.vending%
. Однако это изменяется, и вы должны поддерживать (поддерживать) его в случае изменения - иначе он вернет null (от отладчика) или какое-либо другое имя пакета из другого приложения (нежелательные:))
Ответ 2
Лучший способ узнать, есть ли приложение из Play Маркета, - это то, что предложили g00dy: используя имя пакета установщика.
String packageName = appContext.getPackageName();
String installerPackage = appContext.getPackageManager().getInstallerPackageName(packageName);
если приложение загружено в Play Store (даже если приложение куплено с ПК), installerPackage
должен быть "com.vending.google".
Ответ 3
Я нашел это
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;
}