X

Войти

Авторизируйтесь чтобы подтвердить

Забыли пароль?

или войти через Facebook:

У вас пока нет доступа к AndroidPIT? Зарегистрироваться

Лицензирование программ – Как?

Необходимые условия

Вы уже используете LVL?

Если Вы уже используете Библиотеку проверки лицензии Android (LVL), внедрить Библиотеку лицензирования AndroidPIT очень просто.

1.

Загрузите AndroidPIT Licensing Library и добавьте в свой проэкт.

2.

Измените два следующих определения переменных из

    private LicenseCheckerCallback mLicenseCheckerCallback;
    private LicenseChecker mChecker;

в

    private IAndroidPitLicenseCheckerCallback mLicenseCheckerCallback;
    private AndroidPitLicenseChecker mChecker;

3.

Измените создание чекера из

    mChecker = new LicenseChecker(
            this,
            new ServerManagedPolicy(
                    this,
                    new AESObfuscator(SALT, getPackageName(), deviceId)),
            GOOGLE_PUBLIC_KEY);

в

    mChecker = new AndroidPitLicenseChecker(
            this,
            getPackageName(),
            ANDROIDPIT_PUBLIC_KEY,
            new ServerManagedPolicy(
                    this,
                    new AESObfuscator(SALT, getPackageName(), deviceId)),
            GOOGLE_PUBLIC_KEY);

4.

Измените определение вашего листенера из (например)

    class MyLicenseCheckerCallback implements LicenseCheckerCallback

в

    class MyLicenseCheckerCallback implements IAndroidPitLicenseCheckerCallback

5.

Измените тип параметра errorCode в метод applicationError от

    public void applicationError(ApplicationErrorCode errorCode)

в

    public void applicationError(AndroidPitLicenseCheckCode errorCode)

и расширьте обработку ошибок с кодами ответа AndroidPIT (см. ниже).

Это все! Метод обращения к чекеру, как и allow() и dontAllow() callback-методы не нуждаются в изменениях.

На панели быстрого запуска

Библиотека лицензирования AndroidPIT (AndroidPIT Licensing Library) похожа на Библиотеку проверки лицензии Android компании Google (LVL). Для использования AndroidPIT Licensing Library добавьте Android License Verification Library (LVL) и AndroidPIT Licensing Library в ваш проэкт. В onCreate()-методе создайте AndroidPitLicenseChecker и назначьте ему такой уровень, который бы реализовал интерфейс IAndroidPitLicenseCheckerCallback. Дополнительно вам нужен лицензионный код, который вы найдете в вашем профиле разработчика на сайте AndroidPIT. Пример выглядит следующим образом:

import android.app.Activity;

public class LicensingTest extends Activity implements OnClickListener
{

    private final String ANDROIDPIT_PUBLIC_KEY = "rO0ABXNyABRqYX...;"

    private final Handler mHandler = new Handler();

    private IAndroidPitLicenseCheckerCallback mLicenseCheckerCallback;
    private AndroidPitLicenseChecker mChecker;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        mLicenseCheckerCallback = new MyLicenseCheckerCallback();
        mChecker = new AndroidPitLicenseChecker(
                this,
                getPackageName(),
                ANDROIDPIT_PUBLIC_KEY);

        setContentView(R.layout.main);

        mChecker.checkAccess(mLicenseCheckerCallback);
    }

    @Override
    protected void onDestroy
    {
        super.onDestroy();
        mChecker.onDestroy();
    }

    class MyLicenseCheckerCallback implements IAndroidPitLicenseCheckerCallback
    {

        @Override
        public void allow()
        {
            // TODO: Handle positive response
        }

        @Override
        public void dontAllow()
        {
            // TODO: Handle negative response
        }

        @Override
        public void applicationError(AndroidPitLicenseCheckCode errorCode)
        {
            // TODO: Handle application error
        }

    }

}

В дополнение к проверке действующей лицензии на AndroidPIT вы можете также легко проверить лицензии в Android Market. Для этого адаптируйте вызов конструктора AndroidPitLicenseChecker, для чего назначьте ему также Google Public Key и Google Policy. Все остальные шаги установки LVL вы найдете на LVL documentation.

/**
 * Creates the AndroidPitLicenseChecker with all data to check against the
 * AndroidPIT App Center and Google. Google is checked first. If it fails,
 * AndroidPIT App Center will be consulted.
 
 @param context
 *            the context of the application
 @param appPkgName
 *            the package id of the app
 @param androidPitPublicKey
 *            the developers public key at AndroidPIT
 @param googlePolicy
 *            policy for Google licensing - @see LVL documentation
 @param googlePublicKey
 *            public key for Google licensing - @see LVL documentation
 */
public AndroidPitLicenseChecker(
        final Context context,
        final String appPkgName,
        final String androidPitPublicKey,
        final Policy googlePolicy,
        final String googlePublicKey);

Подробнее

Система лицензирования AndroidPIT ориентирована на проверку Библиотеки проверки лицензий Android (LVL), созданную Google. Она обеспечивает проверку подлинности программ, которые приобретаются через AndroidPIT App Center. Для этого необходимо подключение к серверу лицензий AncroidPIT через Интернет. Кроме того, конечному пользователю нужно иметь действующующий профиль на AndroidPIT.

С помощью AndroidPIT Licensing Library ваша программа сможет проверить через App Center, есть ли у конечного пользователя действующая лицензия для запуска программы. Проверка наличия лицензии происходит при каждом запуске программы максимум один раз в день. Промежуточный контроль показывает последнее значение, выданное сервером лицензий (время может меняться без предварительного уведомления).

Шаг за шагом

Эта пошаговая инструкция предусматривает, что вы используете Eclipse ADT. В случае, если вы пользуетесь различными средствами разработки, вам могут понадобиться дополнительные действия.

Загрузите AndroidPIT Licensing library и Android License Verification Library (LVL) и добавьте их как проэкты в Eclipse. Для использования AndroidPIT Licensing Library необходима как минимум 4я версия Android API, которая была выпущена с Android 1.6. Создайте новую Аndroid-программу и добавьте androidpit-licensing-lib в настройках в разделе android как независимую библиотеку к проэкту программы. Пожалуйста, убедитесь, что библиотека связана с Android License Verification Library (LVL).

Мой проект показывает неразрешенные символы или я не могу откомпилировать мою программу.

Проверьте путь к Google LVL и к AndroidPIT Licensing library в настройках вашего проэкта Android. Он должен отвечать пути в вашей файловой системе.

Application project settings

Установки для AndroidPIT Licensing Library должны выглядеть следующим образом:

Library project settings

Как внедрить проверку лицензии в мой код?

Чтобы разрешить licensing library проверку лицензии через AndroidPIT App Center, создайте в onCreate()-методе экземпляр класса MyLicenseCheckerCallback. Конструктор ожидает экземпляр контекста, который обычно является самой деятельностью. Полученный код может выглядеть следующим образом:

mLicenseCheckerCallback = new MyLicenseCheckerCallback();
mChecker = new AndroidPitLicenseChecker(
          this, getPackageName(), ANDROIDPIT_PUBLIC_KEY);
mChecker.checkAccess(mLicenseCheckerCallback);

Кроме того, конструктору потребуется название пакета вашей программы и лицензионный ключ. Лицензионный ключ является открытым ключем на основе 64-битной кодировки, который вы найдете в вашем профиле разработчика на сайте AndroidPIT .

Как получить уведомление от сервера лицензий?

Проверка лицензии осуществляется через вызов checkAccess() в AndroidPitLicenseChecker. Метод требует обратного вызова объекта, который реализует интерфейс IAndroidPitLicenseCheckerCallback. Метод allow() вызывается из Licensing Library, чтобы проинформировать вас об успешной проверке лицензии пользователя. В любом другом случае вызывается dontAllow(). Кроме того, метод applicationError() информирует вас об ошибках, которые могут произойти во время проверки лицензии. Вы можете реагировать по своему желанию на действия, которые выполняются с помощью этих трех методов.

class MyLicenseCheckerCallback implements IAndroidPitLicenseCheckerCallback
{

    @Override
    public void allow()
    {
        // TODO: Handle positive response
    }

    @Override
    public void dontAllow()
    {
        // TODO: Handle negative response
    }

    @Override
    public void applicationError(AndroidPitLicenseCheckCode errorCode)
    {
        // TODO: Handle application error
    }

}

Как дополнительно проверить лицензию в Android Market?

В дополнение к проверке в нашей системе лицензирования мы предлагаем простую интеграцию Android License Verification Library (LVL) компании Google. Чтобы ее интегрировать, просто добавьте LVL policy и public key в конструктор нашего AndroidPitLicenseChecker. Таким образом проверка лицензии будет происходить внутри license library-кода. При успешной проверке лицензии вы будете напрямую уведомлены с помощью allow()-метода. Негативные результаты проверки вызовут дополнительный запрос к серверам лицензирования AndroidPIT. Если и эта проверка лицензии будет негативной, вы получите отрицательный ответ от библиотеки лицензирования.

Этот пример ориентируется на пример из Google API.

mChecker = new AndroidPitLicenseChecker(
               this, 
               getPackageName()
               ANDROIDPIT_PUBLIC_KEY,
               new ServerManagedPolicy(
                   this,
                   new AESObfuscator(SALT, getPackageName(), deviceId)),
               GOOGLE_PUBLIC_KEY);

Как проверить различные сообщения об ошибках от сервера лицензирования?

На странице лицензирования в вашем профиле разработчика на AndroidPIT вы можете настроить код ответа, который отправляется сервером лицензирования. Это удобно в том случае, если вы хотите протестировать правильность реакции вашей программы на сообщения об ошибке от нашего сервера лицензирования. Для этого просто выберите соответствующее значение из выпадающего списка. После этого сервер лицензий будет всегда выдавать выбранный код ответа, если вы вошли в систему с вашего профиля разработчика.

Как отключить кэширование результатов в App Center?

App Center сохраняет результат последнего запроса минимум один день или пока мобильное устройство имеет возможность связаться с нашим сервером лицензий через Интернет. Чтобы отключить кэширование, вы можете включить режим отладки в чекере лицензии. Для этого просто вызовите setDebug(true). Это отключит кэширование и все запросы будут отправлены в App Center. Не забудьте выключить режим отладки, прежде чем опубликовать вашу программу.

Что произойдет, если пользователь не вошел в App Center?

Если в App Center отсутствуют или хранятся неправильные учетные данные, библиотека откроет всплывающее диалоговое окно, чтобы узнать e-mail и пароль пользователя AndroidPIT.

Как я могу убедиться, что запросы, касающиеся лицензий попадают на лицензионный сервер?

AndroidPIT license library содержит категорию AndroidPitSignedLicenseChecker. Эта категория позволяет проверить, попал ли запрос на лицензионный сервер или нет. Для этого ответ сервера подписывается с помощью личного ключа разработчика программы. AndroidPIT license library дополнительно проверяет полученные данные с подписью, используя AndroidPitLicenseingResponseValidator, сравнивая Salt, отправленный в запросе с Salt в ответе. Пожалуйста, обратите внимание на то, что этот механизм не обеспечивает кэширование данных ответа. Если пользователь не имеет соединения с лицензионным сервером, AndroidPIT license library отвечает сообщением ERROR_NOT_CONNECTED.

Пример использования AndroidPitSignedLicenseChecker выглядит следующим образом:

AndroidPitSignedLicenseChecker mChecker;

[ ... ]

mChecker = new AndroidPitSignedLicenseChecker(
               this, 
               getPackageName()
               ANDROIDPIT_PUBLIC_KEY);

Я могу использовать свой собственный метод проверки лицензии?

Да, это возможно. Пожалуйста, приведите в действие ILicensingResponseValidator и обеспечьте AndroidPitSignedLicenseChecker инстанцией имплементирующего класса. Этот класс обеспечивает выполнение двух методов. getSalt() должен возвращать целое число, которое будет использоваться в качестве Salt при проверки лицензии. Salt следует сохранить во время запроса, чтобы иметь возможность сопоставить с Salt в ответе. Метод checkResponse() проверяет данные в ответе и реагирует на ошибку сообщением AndroidPitLicenseCheckCode.NOT_LICENSED. Если проверка прошла успешно, код ответа сервера должен вернуться. Для примера можно обратиться к AndroidPitLicensingResponseValidator из библиотеки лицензирования AndroidPIT.

Мой проект не может найти enumerationde.androidpit.AndroidPitLicenseCheckError.

Она переименована в de.androidpit.AndroidPitLicenseCheckCode.

Как создать открытый ключ на основе 64--разрядной кодировки?

Как вы, наверное, заметили, мы предоставляем вам открытый ключ в виде Base64-закодированной строки. Чтобы проверить подпись к данным ответа нужно переобразовать эту строку в обьект PublicKey. Следующий код покажет как это сделать.

    /**
     * Converts the base64 encoded representation of a public key into a
     * PublicKey object.
     */
    private PublicKey createPublicKey(String pubKeyBase64)
    {

        PublicKey pubKey = null;
        try
        {
            // the pub key comes in as a Base64 coded string. Decode to the
            // byte array which contains the object stream of the public key
            ByteArrayInputStream pubKeyByteArray = new ByteArrayInputStream(
                    Base64.decode(pubKeyBase64));
            ObjectInputStream publicKeyObject = new ObjectInputStream(
                    pubKeyByteArray);
            BigInteger modulus = (BigIntegerpublicKeyObject.readObject();
            BigInteger exponent = (BigIntegerpublicKeyObject.readObject();

            RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, exponent);
            KeyFactory rsaKeyFactory = KeyFactory.getInstance("RSA");
            pubKey = rsaKeyFactory.generatePublic(keySpec);
        }
        catch (Exception ex)
        {
            Log.e(
                    "LicenseResponseValidator",
                    "Deserialization of public key failed.",
                    ex);
        }
        return pubKey;
    }

Библиотека лицензирования AndroidPIT, AndroidPIT Licensing Library

В случае, если вы используете старую Android Market Licensing library (Package com.android.vending.licensing), используйте следующую AndroidPIT Licensing library:
Библиотека лицензирования AndroidPIT, AndroidPIT Licensing Library Version 1.3

Если вы используете новую версию Google Play library (Package com.google.android.vending.licensing), используйте следующую версию AndroidPIT Licensing library:
Библиотека лицензирования AndroidPIT, AndroidPIT Licensing Library Version 2.1