Убедитесь, что приложение для Android было установлено из Play-Store.

Недавно я обнаружил приложение BlackMarket, это копия приложений Google Play-Store, где эти люди берут платное приложение из Play-Store и позволяют своим пользователям загружать его и использовать бесплатно.

Как разработчика, который планирует взимать доллар за мое приложение, это беспокоит меня, и я хотел бы убедиться, что мое приложение было установлено через Play-Store или любой другой магазин, который я одобряю.

Я предполагаю, что единственный способ проверить такие вещи — это отслеживание кампании, но, начиная с Google Analytics v2, отслеживание кампании выполняется с помощью приемника в банке.

Есть ли другой способ определить источник установки моего приложения? Есть ли способ перехватить данные отслеживания кампании?

Спасибо.


person TacB0sS    schedule 31.07.2013    source источник
comment
Если это платное приложение в магазине игр, вы можете использовать API лицензии Google разработчика. android.com/google/play/licensing/index.html. Это проверяет, что приложение было приобретено через учетную запись Google пользователя, и если нет, вы можете отобразить ошибку и отправить их в магазин игр, чтобы совершить покупку.   -  person Boardy    schedule 31.07.2013
comment
Сначала проверьте это: developer.samsung. ком/форум/поток/ . Затем PackageManager pm = getPackageManager(); String installationSource = pm.getInstallerPackageName(getPackageName()); — при установке из помеченного, installSource вернет что-то вроде com.google.android% или com.android.vending% — однако это изменится, и вы должны поддерживать (поддерживать) его в случае изменения — иначе он вернет null (из отладчика) или какой-либо другой пакет имя из какого-то другого приложения (нежелательных :)).   -  person g00dy    schedule 31.07.2013
comment
@Boardy Эта проверка выполняется для каждого пользователя или устройства пользователя? что делать, если на устройстве есть две учетные записи?   -  person TacB0sS    schedule 31.07.2013
comment
@g00dy g00dy Кажется, это самый удобный выбор, жаль, что не все магазины предоставляют один и тот же механизм, и убедитесь, что разработчик знает источник установки приложения.   -  person TacB0sS    schedule 31.07.2013
comment
Да, это действительно позор, но как еще вы можете знать об этом? Меня это очень интересует... Однако применим ли этот метод в вашем случае?   -  person g00dy    schedule 31.07.2013
comment
Это мое приложение, поэтому я могу выполнить проверку, и если бы оно не было установлено из магазина воспроизведения, я бы отключил приложение и перенаправил пользователя в магазин воспроизведения, я проверю его с помощью одного из моих приложений. следующую версию выложу...   -  person TacB0sS    schedule 31.07.2013
comment
@TacB0sS Проверка основана на пользователе, поэтому проверка будет выполняться для любой учетной записи, зарегистрированной для использования Google Play. Я полагаю, что если существует более 1 учетной записи, она автоматически проверяет каждую учетную запись, зарегистрированную для использования Google Play.   -  person Boardy    schedule 31.07.2013
comment
Я просмотрел документы... это не кажется очень конкретным, и если вы хотите сделать это конкретным, вам потребуется свой собственный сервер, а это означает, что я уже буду управлять всей логикой самостоятельно. сервер.   -  person TacB0sS    schedule 03.08.2013
comment
@ g00dy, добавьте ответ, чтобы я его принял... Я проверил это с нашим приложением, опубликовал результаты в Analytics.   -  person TacB0sS    schedule 10.08.2013


Ответы (3)


Перейдите по этой ссылке здесь. затем

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

При установке из отмеченного installationSource вернет что-то вроде com.google.android% или com.android.vending%. Однако это меняется, и вы должны поддерживать (поддерживать) его в случае изменения - иначе он вернет null (из отладчика) или какое-то другое имя пакета из какого-то другого приложения (нежелательные :))

person g00dy    schedule 09.08.2013
comment
За исключением «com.android.vending», который должен отображаться во всех новых установках, поскольку Google-Market превратился в Google Play-Store... Я также обнаружил, что 0,002% новых установок приходится на «com.google». android.feedback', что заставляет меня задуматься, что это такое? - person TacB0sS; 10.08.2013

Лучший способ узнать, находится ли приложение в Play Store, — это то, что предложил g00dy: использовать имя пакета установщика.

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

если приложение загружено в Play Маркете (даже если оно куплено вместе с ПК), installerPackage должно быть "com.vending.google".

person Sergio Carvalho    schedule 01.08.2013

Я нашел это 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;
}
person jeet.chanchawat    schedule 19.09.2013
comment
Я не совсем уверен, что это дает мне именно то, что я хочу, но как только у меня будет шанс, я попробую... Спасибо - person TacB0sS; 20.09.2013