Forzar la actualización de la aplicación Android cuando la nueva versión esté disponible

Tengo una aplicación en Google Play Store. Cuando una versión de actualización está disponible, la versión anterior se volverá impracticable si los usuarios no actualizan la aplicación, no entran en la aplicación. Por favor, ayúdame sobre este problema.

Estoy de acuerdo con el punto anterior de Scott Helme. Pero en algunas situaciones extremas (problemas de seguridad, API que rompe los cambios …) en los que es absolutamente necesario que los usuarios se actualicen para seguir usando la aplicación, podría proporcionar una API de versiones sencilla. La API se vería así:

VersionCheck API:

Parámetros de la petición:

  • int appVersion

Respuesta

  1. boolean forceUpgrade
  2. boolean recommendUpgrade

Cuando empiece tu aplicación, podrías llamar a esta API que pase en la versión actual de la aplicación y comprobar la respuesta de la llamada API de versiones.

Si forceUpgrade es true , muestre un cuadro de diálogo emergente con opciones para permitir que el usuario abandone la aplicación o ir a Google Play Store para actualizar la aplicación.

Else si recommendUpgrade es true , muestre el cuadro de diálogo emergente con opciones para actualizar o continuar usando la aplicación.

Incluso con esta capacidad de actualización forzada, debe seguir apoyando versiones anteriores, a menos que sea absolutamente necesario.

No debes dejar de soportar una versión anterior tan pronto como salga una nueva versión. Esto resultará en una experiencia de usuario terrible. No sé de ningún proveedor de software en existencia que hace esto, por una buena razón.

¿Qué sucede si el usuario no puede actualizar o no quiere hacerlo en ese momento? Simplemente no pueden usar su aplicación, lo cual es malo.

Google no proporciona ninguna opción para el seguimiento de versiones de este tipo, por lo que tendría que rodar el suyo propio. Un simple servicio web para devolver la versión actual en vivo que su aplicación puede comprobar sería suficiente. A continuación, puede actualizar la versión y la aplicación sabrá que está desactualizada. Solo recomendaría usarlo para que sus usuarios sepan que hay una actualización más rápidamente que dependiendo de Google Play. Realmente no debe utilizarse para evitar que la aplicación funcione, sólo para pedir al usuario que actualice.

Intente esto: Primero usted necesita hacer una llamada de la petición al acoplamiento del playstore, buscar la versión actual de allí y después compararla con su versión actual.

 String currentVersion, latestVersion; Dialog dialog; private void getCurrentVersion(){ PackageManager pm = this.getPackageManager(); PackageInfo pInfo = null; try { pInfo = pm.getPackageInfo(this.getPackageName(),0); } catch (PackageManager.NameNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } currentVersion = pInfo.versionName; new GetLatestVersion().execute(); } private class GetLatestVersion extends AsyncTask<String, String, JSONObject> { private ProgressDialog progressDialog; @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected JSONObject doInBackground(String... params) { try { //It retrieves the latest version by scraping the content of current version from play store at runtime Document doc = Jsoup.connect(urlOfAppFromPlayStore).get(); latestVersion = doc.getElementsByAttributeValue ("itemprop","softwareVersion").first().text(); }catch (Exception e){ e.printStackTrace(); } return new JSONObject(); } @Override protected void onPostExecute(JSONObject jsonObject) { if(latestVersion!=null) { if (!currentVersion.equalsIgnoreCase(latestVersion)){ if(!isFinishing()){ //This would help to prevent Error : BinderProxy@45d459c0 is not valid; is your activity running? error showUpdateDialog(); } } } else background.start(); super.onPostExecute(jsonObject); } } private void showUpdateDialog(){ final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("A New Update is Available"); builder.setPositiveButton("Update", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse ("market://details?id=yourAppPackageName"))); dialog.dismiss(); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { background.start(); } }); builder.setCancelable(false); dialog = builder.show(); } 

Las respuestas de Scott y Michael son correctas. Organice un servicio que proporcione un número de versión min que admita y compare eso con la versión instalada. Usted debe esperar nunca tener que usar esto, pero es un salvavidas si alguna versión está ahí fuera que absolutamente debe matar debido a alguna falla grave.

Sólo quería añadir el código para qué hacer a continuación. A continuación, le mostramos cómo iniciar el intento de Google Play y llevarlo a su nueva versión en la tienda después de solicitar al usuario que debe actualizar.

 public class UpgradeActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_upgrade); final String appName = "com.appname"; Button button = (Button) findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+appName))); } }); } } 

Debe volver a considerar su diseño si tiene que forzar actualizaciones en cada versión.

Le recomiendo que consulte la funcionalidad de configuración remota de Firebase para esto.

Lo implementé usando un parámetro – app_version_enabled – con una condición "Disabled Android Versions" que se parece a esto:

 applies if App ID == com.example.myapp and App version regular expression ^(5.6.1|5.4.2) 

El valor predeterminado del parámetro es "true", pero Disabled Android Versions tiene un valor de false. En mi regex para las versiones Android deshabilitadas, puede agregar más versiones deshabilitadas simplemente con otro |{version name} dentro de esos paréntesis.

A continuación, sólo comprobar si la configuración dice que la versión está habilitada o no – Tengo una actividad que lanzar que obliga al usuario a actualizar. Comprobar en los dos únicos lugares que la aplicación puede ser lanzada desde el exterior (mi actividad predeterminada de lanzador y una actividad de manejo de intenciones). Dado que la configuración remota funciona en base a caché, no captura inmediatamente las versiones "deshabilitadas" de la aplicación si no ha pasado el tiempo requerido para que la caché se invalide, pero que es como máximo 12 horas si va por Su valor de caducidad de caché recomendado.

Es mejor definir nuestro propio proceso para la actualización.

  1. Crear un servicio web que ofrece la última versión de la aplicación (ios, android) de nuestro servidor.
  2. O Cualquier servicio web que utilizaste en la aplicación (por ejemplo, Login) devolverá la última versión de la aplicación del servidor.
  3. Una vez que la aplicación obtendrá la versión de # 1 o 2. La aplicación se cruzará con la versión local / cuurent appversion. Si hay diferencia entonces podemos mostrar la alerta como sigue,

Android e iOS: Si la última versión de la aplicación está disponible, se mostrará la alerta como "Última versión disponible con más funciones, Para actualizar haga clic en el botón de actualización" (Alerta con "Upgarde" y "No. Playstore / Appstore y abrirá la última versión.

  --- we can do upgrade compulsory or optionally. 

Antes del proceso de actualización, asegúrese de que ha manejado el proceso adecuado de migración de db si hay algún cambio en el esquema db.

Para obligar al usuario de la aplicación a actualizar si hay una actualización disponible en el mercado, primero debe comprobar la versión de la aplicación en el mercado y compararla con la versión de la aplicación en el dispositivo. Si son diferentes, puede ser una actualización disponible. En este post escribí el código para obtener la versión actual del mercado y la versión actual en el dispositivo y compararlos juntos. También mostré cómo mostrar el diálogo de actualización y redirigir al usuario a la página de actualización. Por favor, visite este enlace: https://stackoverflow.com/a/33925032/5475941 Sólo asegúrese de que en el cuadro de diálogo sólo mostrar el botón de actualización de usuario y no mostrarle el botón de cancelar. En este caso se verá obligado a actualizar, antes de que pueda utilizar la aplicación.

Puede hacerlo haciendo una coincidencia entre un número de versión que se mantiene en la aplicación en una variable y de manera similar la versión de la aplicación actual se mantiene en el lado del servidor y cada vez que el usuario abre la aplicación la primera solicitud debe enviarse para comprobar que si se funda Hacer coincidir no hacer nada simplemente dejar que el usuario use su aplicación de lo contrario disparar una intención a la google playstore o abrir una ventana webview a su aplicación (window.open (" https://play.google.com/store/apps/details?id= Nombre de paquete "," _system "," ubicación = sí ");) y allí tendrán automáticamente el botón que pide la actualización que es qué google playstore hace para usted si usted no tiene actualizaciones automáticas encendido.

Puede notificar a sus usuarios que hay una nueva versión de la aplicación actual disponible para actualizar. Además, si esta condición es cierta, puede bloquear el inicio de sesión en la aplicación.

Por favor, vea si esto le proporciona la solución.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.