Hi All

Sorry for interrupting but I need this info urgently so Plz anybody help me 
out here
I need a small info on how to start with Android LVL
The following is my code

package com.example.helloworld;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings.Secure;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.vending.licensing.AESObfuscator;
import com.google.android.vending.licensing.LicenseChecker;
import com.google.android.vending.licensing.LicenseCheckerCallback;
import com.google.android.vending.licensing.Policy;
import com.google.android.vending.licensing.ServerManagedPolicy;
import com.google.android.vending.licensing.util.Base64;
import com.google.android.vending.licensing.util.Base64DecoderException;

public class LicenseCheck extends Activity {
    private static final String BASE64_PUBLIC_KEY = "Corresponding public 
key";

    // Generate your own 20 random bytes, and put them here.
    private static final byte[] SALT = new byte[] { -46, 65, 30, -128, -103,
            -57, 74, -64, 51, 88, -95, -45, 77, -117, -36, -113, -11, 32, 
-64,
            89 };

    private TextView mStatusText;
    private Button mCheckLicenseButton;

    private LicenseCheckerCallback mLicenseCheckerCallback;
    private LicenseChecker mChecker;
    // A handler on the UI thread.
    private Handler mHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.activity_main);

        mStatusText = (TextView) findViewById(R.id.status_text);
        mCheckLicenseButton = (Button) 
findViewById(R.id.check_license_button);
        mCheckLicenseButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                doCheck();
            }
        });

        mHandler = new Handler();

        // Try to use more data here. ANDROID_ID is a single point of 
attack.
        String deviceId = Secure.getString(getContentResolver(),
                Secure.ANDROID_ID);

        // Library calls this when it's done.
        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();
    }

    protected Dialog onCreateDialog(int id) {
        final boolean bRetry = id == 1;
        return new AlertDialog.Builder(this)
                .setTitle(R.string.unlicensed_dialog_title)
                .setMessage(
                        bRetry ? R.string.unlicensed_dialog_retry_body
                                : R.string.unlicensed_dialog_body)
                .setPositiveButton(
                        bRetry ? R.string.retry_button : 
R.string.buy_button,
                        new DialogInterface.OnClickListener() {
                            // bretry = 1 if retry button is active

                            // bretry = 0 if buy button is active

                            boolean mRetry = bRetry;

                            public void onClick(DialogInterface dialog,
                                    int which) {
                                if (mRetry) {
                                    doCheck();
                                } else {
                                    Intent marketIntent = new Intent(
                                            Intent.ACTION_VIEW,
                                            
Uri.parse("http://market.android.com/details?id=";
                                                    + getPackageName()));
                                    startActivity(marketIntent);
                                }
                            }
                        })
                .setNegativeButton(R.string.quit_button,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int which) {
                                finish();
                            }
                        }).create();
    }

    private void doCheck() {
        mCheckLicenseButton.setEnabled(false);
        setProgressBarIndeterminateVisibility(true);
        mStatusText.setText(R.string.checking_license);
        mChecker.checkAccess(mLicenseCheckerCallback);
    }

    private void displayResult(final String result) {
        mHandler.post(new Runnable() {
            public void run() {
                mStatusText.setText(result);
                setProgressBarIndeterminateVisibility(false);
                mCheckLicenseButton.setEnabled(true);
            }
        });
    }

    private void displayDialog(final boolean showRetry) {
        mHandler.post(new Runnable() {
            public void run() {
                setProgressBarIndeterminateVisibility(false);
                showDialog(showRetry ? 1 : 0);
                mCheckLicenseButton.setEnabled(true);
            }
        });
    }

    private class MyLicenseCheckerCallback implements 
LicenseCheckerCallback {
        public void allow(int policyReason) {
            if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }
            // Should allow user access.
//            Intent i = new Intent(LicenseCheck.this, MainActivity.class);
//            startActivity(i);
//            finish();

            displayResult(getString(R.string.allow));

        }

        public void dontAllow(int policyReason) {
            if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }
            displayResult(getString(R.string.dont_allow));
            // Should not allow access. In most cases, the app should assume
            // the user has access unless it encounters this. If it does,
            // the app should inform the user of their unlicensed ways
            // and then either shut down the app or limit the user to a
            // restricted set of features.
            // In this example, we show a dialog that takes the user to 
Market.
            // If the reason for the lack of license is that the service is
            // unavailable or there is another problem, we display a
            // retry button on the dialog and a different message.
            displayDialog(policyReason == Policy.RETRY);
        }

        public void applicationError(int errorCode) {
            if (isFinishing()) {
                // Don't update UI if Activity is finishing.
                return;
            }
            // This is a polite way of saying the developer made a mistake
            // while setting up or calling the license checker library.
            // Please examine the error code and fix the error.
            String result = String.format(
                    getString(R.string.application_error), errorCode);
            displayResult(result);
        }
    }

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

}


The following is my main activity

package com.example.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}


The following is my activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:id="@+id/status_text"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1"
    />
<Button
    android:id="@+id/check_license_button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/check_license"
    />
</LinearLayout>

I have pasted the following line in manifest

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

Iam getting the following errors when I try to test it using test account.
Test account which iam using above is created using the option present in 
edit profile page of google publisher account

The following are the errors
1.error contacting licensing server android
2.ERROR_NOT_MARKET_MANAGED

I have the following doubts

1.Is it necessary to upload and save the app in the publisher account if we 
want to test it using test account
2.How actually to start with the testing of this licensing feature

Thanks in advance:)
Any help would be really appreciated



On Wednesday, September 12, 2012 8:09:52 PM UTC+5:30, Paolo Mancini wrote:
>
> Hi, I'm using the LVL ServerManagedPolicy but I've a couple of question.
>
> This is my case. A client buy my app and after try to open and use it 
> without internet connection.
>
> I've seen that the server response always dontAllow()  RETRY.
>
> Is it possible to obtain that the ServerManagedPolicy allow the user for a 
> number of retry, so my client can use the app also it use the app without 
> internet connection (my client never open the app with internet connection)?
>
> Many thanks
>
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to