Проверка лицензии Android идет прямо в приложениеError (...) - PullRequest
4 голосов
/ 03 апреля 2011

Я только что реализовал проверку сервера Android в своем приложении.Я использую метод StrictPolicy, потому что я могу быть немного горьким из-за пиратской версии, имеющей 5-кратное количество загрузок по сравнению с версией на рынке ... Во всяком случае, я буквально закодировал метод в своем исходном коде.Однако, когда я переключаю Ответ теста лицензии на консоли разработчика на Лицензированный, я получаю нелицензированный диалог.Однако в методе applicationError вызывается dontAllow (), и когда я закомментирую эту строку, нелицензированный диалог не отображается.Что я делаю неправильно?Вот мой класс MyLicenseCheckerCallback.

Я вызываю doCheck в onCreate и снова в onResume.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mHandler = new Handler();
    mLicenseCheckerCallback = new MyLicenseCheckerCallback();

    // Construct the LicenseChecker with a Policy.
    mChecker = new LicenseChecker(
        this, new ServerManagedPolicy(this,
            new AESObfuscator(SALT, getPackageName(), deviceId)),
            BASE64_PUBLIC_KEY
            );
    doCheck();

    setContentView(R.layout.main);
    ...


private void doCheck() {
    mChecker.checkAccess(mLicenseCheckerCallback);
}

private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
    public void allow() {
        if (isFinishing()) {
            // Don't update UI if Activity is finishing.
            return;
        }
        // Should allow user access.
    }

    public void dontAllow() {
        if (isFinishing()) {
            // Don't update UI if Activity is finishing.
            return;
        }
        //Be as annoying as possible
        illegalDownload = new IllegalDownloadHandler(speedy.this);
        illegalDownload.show();
        illegalDownload.setOnDismissListener(new OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialog) {
                    Intent goToMarket = null;
                    goToMarket = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.TimothyMilla.SpeedBoost"));
                    startActivity(goToMarket);
                    illegalDownload.dismiss();
                }
        });
        // Should not allow access. An app can handle as needed,
        // typically by informing the user that the app is not licensed
        // and then shutting down the app or limiting the user to a
        // restricted set of features.
        // In this example, we show a dialog that takes the user to Market.
        //showDialog(0);
        //onDestroy();
    }

    @Override
    public void applicationError(ApplicationErrorCode errorCode) {
        // TODO Auto-generated method stub
        dontAllow();
        //when I comment the above line out, the unlicensed dialog is not shown.
    }

    private void displayResult(final String result) {
        mHandler.post(new Runnable() {
            public void run() {
                //dontAllow();
                Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT).show();
                //setProgressBarIndeterminateVisibility(false);
            }
        });
    }
}

Ответы [ 2 ]

8 голосов
/ 25 апреля 2011

Поскольку вы не обновили мой комментарий, мои догадки ... убедитесь, что вы:

1 - правильно скопировали ваш открытый ключ.

2 - заполненный идентификатор устройства, как я думаю, выявляются.Просто убедитесь, потому что ваш код выше скрывает эту декларацию.Но так как это вызовет у вас ошибки компиляции, я уверен, что вы.

3- изменили код ответа в консоли разработчика (вы сказали, что это так).

4- Наконец,что вы указали правильные разрешения в файле манифеста Android:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
0 голосов
/ 09 апреля 2013

У меня была похожая проблема, я решил ее, поместив разрешения перед определением приложения в android манифесте, также будьте осторожны с версией приложения, если при загрузке в маркете у вас должна быть та же версия.

<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >......
...