La aplicación de licencias de Android no funciona?

Implementé la licencia de Google cheker leyendo las instrucciones oficiales .

import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.IBinder; import android.provider.Settings.Secure; 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.ServerManagedPolicy; public class Splash extends Activity { MyLicenseCheckerCallback mLicenseCheckerCallback; LicenseChecker mChecker; byte[] SALT = new byte[] { -73, 95, 70, -126, -103, -57, 14, -46, 51, 88, -5, -60, 77, -88, -63, -13, -1, 82, -4, 9 }; //Handler mHandler; String BASE64_PUBLIC_KEY="My base key"; Context mContext; IBinder serviceBinder; String deviceId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.splash); mLicenseCheckerCallback = new MyLicenseCheckerCallback(); deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); // Construct the LicenseChecker with a policy. mChecker = new LicenseChecker(this, new ServerManagedPolicy(Splash.this, new AESObfuscator(SALT, getPackageName(), deviceId)), BASE64_PUBLIC_KEY); doCheck(); } private class MyLicenseCheckerCallback implements LicenseCheckerCallback { @Override public void allow(int reason) { // TODO Auto-generated method stub if (isFinishing()) return; // Don't update UI if Activity is finishing. // Toast.makeText(Splash.this, "Success", Toast.LENGTH_LONG).show(); Intent intent=new Intent(Splash.this,Main.class); startActivity(intent); finish(); // Should allow user access. // so do nothing } @Override public void dontAllow(int reason) { // TODO Auto-generated method stub if (isFinishing()) return; // Don't update UI if Activity is finishing. // Toast.makeText(Splash.this, "Fail", Toast.LENGTH_LONG).show(); createDialog(); } @Override public void applicationError(int errorCode) { // TODO Auto-generated method stub } } @Override protected void onDestroy() { super.onDestroy(); mChecker.onDestroy(); } private void doCheck() { // mCheckLicenseButton.setEnabled(false); setProgressBarIndeterminateVisibility(true); /// mStatusText.setText(R.string.checking_license); mChecker.checkAccess(mLicenseCheckerCallback); } public void createDialog(){ AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("PIRACY WARNING"); builder.setMessage("A valid purchase for My App has not been detected. Your IP" + " has been logged and all offenders will be reported to the authorities." + " If you received this message in error, please contact Support."); builder.setPositiveButton("Buy Now", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse( "http://market.android.com/details?id=" + getPackageName())); startActivity(marketIntent); } }); builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }); AlertDialog dialog = builder.create(); dialog.show(); } } 

Y aquí está el permiso menifest que he dado

 <supports-screens android:normalScreens="true" android:largeScreens="true" android:smallScreens="true" android:anyDensity="true" android:xlargeScreens="true" android:resizeable="true"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

Después de implementar esto ejecutar la aplicación y firmar con la clave de liberación y subido apk como borrador en google play desarrollador de la consola y también he añadido 3 cuenta de prueba en la configuración de la consola de desarrollo.

Según leí y entiendo que debe ejecutarse en el dispositivo que teniendo la cuenta de prueba como cuenta principal en el dispositivo y el resto del dispositivo que tendría que mostrar el diálogo.

Pero en mi caso en todo el dispositivo que funciona bien y esta cosa suceder alguna situación extraña si Internet está desconectado de lo que mostrará el diálogo sobre la piratería y si está conectado que worsk en todos los dispositivos a pesar de la cuenta de prueba devies.

U ya ha hecho todos estos pasos pero claramente comprobarlo una vez más:

 1.check once ur's public key compare with the draft store public key. 2.Give own salt 20 numbers. 3.Give properly test accounts in the google play and same account use in the device also. 4.In google play u have to put licensed mode for application draft. 5.check after some time because it will take some time to give valid results. 6.finally verify the alert dialog conditions in application. 7.clear the google play cache in ur mobile may be it will store the results. 

Finalmente encontré la forma correcta de probar el comprobador de licencias de google.

Como he subido apk en google play desarrollador de consola como borrador y si instalo que apk en cualquier dispositivo de lo que se ejecutará con la respuesta LICENCIADA si en el dispositivo no se tiene inicio de sesión con la cuenta de prueba.

Y finalmente hago la prueba de esta manera he añadido la cuenta de prueba y seleccione Respuesta de prueba de licencia en la consola de desarrollador como LICENSED que la aplicación se ejecutará y después de que también cambiar la configuración en la consola de desarrolladores con NOT_LICENSED que muestra diálogo sobre la piratería en el dispositivo que con la cuenta de prueba Como cuenta principal.

NOTA IMPORTANTE : Y aparte de los dispositivos de la cuenta de prueba que se ejecutan con la respuesta LICENCIADA beacuse es APK cargado como borrador en la tienda de juego. Por lo tanto, para las licencias de google de prueba debemos tener en cuenta sólo la cuenta de prueba agregada en Google Play Developer Console

El LVL está trabajando en todos los dispositivos con las cuentas que agregó, no sólo la cuenta principal. No debería funcionar en teléfonos con una cuenta que no haya añadido a la consola de desarrollo. Incluso, el LVL trata de verificar tu aplicación con el google LVL -Server, por lo que necesita una conexión a Internet, esto está bien. Si sólo desea comprobar la licencia una vez, tiene que guardar algunos datos, por ejemplo en las preferencias compartidas, que la comprobación ya ha hecho. Por lo tanto, la próxima vez que empiece la aplicación, puede comprobar con estas preferencias compartidas guardadas, si la aplicación se acaba de verificar. En caso afirmativo, no vuelva a realizar ninguna comprobación, si no, vuelva a intentarlo.

Puede configurar el comportamiento de la comprobación de licencia en la consola del desarrollador, Puede simular una respuesta normal o, por ejemplo, una respuesta "no verificada", etc.

  • Android - Cambiar el tema de la aplicación en onClick
  • Cómo utilizar assert en android?
  • La imagen compartida de Android no borra la vista previa de un elemento previamente compartido
  • ¿Cómo insertar valores en matriz bidimensional de forma programática?
  • ¿Puedo desplazar un ScrollView de forma programática en Android?
  • Fuentes TrueType en libGDX
  • Android Multipart POST para Google App Engine no funciona
  • Condicional no se activa cuando se le da un 75: android
  • Una implementación insegura de la interfaz X509TrustManager de google
  • Reutilizando HttpURLConnection
  • Implementación de la configuración de ahorro
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.