Como verificar si hay disponible una actualización en PlayStore?

publicado por: Anonymous

Buen dia, como puedo hacer para que cada ves que se abra la app, esta verifique si hay actualización en la play store?

Aclarando mi pregunta, es una aplicacion que he desarrollado, lo que necesito es que cuando entre a la apliacion muestre un Dialog fragment notificacando que hay una actualizacion, de lo contrario no tiene que mostrar el Dialog

solución

Actualmente la aplicación Play Store lo realiza pero si lo deseas realizar desde tu aplicación:

Puedes obtener la versión realizando un GET a la página de tu aplicación y buscar el valor de “Current Version” en el contenido HTML. Como ejemplo esta aplicación:

https://play.google.com/store/apps/details?id=com.rovio.baba

si revisas el código html encontrarás “Current Version” y posteriormente su valor 2.19.1 (mayo 2018).

En internet puedes encontrar varias versiones para realizar esto para realizarlo en tu propia aplicación, un ejemplo es utilizando el parser html JSoup, para esto se debe agregar la dependencia dentro del archivo build.gradle:

dependencies {
   ...
   implementation 'org.jsoup:jsoup:1.11.3'
   ...
   ...
}

es importante recordar que la comparación se debe realizar entre versiones únicamente se puede realizar con versiones definidas que tienen este tipo: x.x.x.x.x.x

por lo que debes estar preparado para realizar la comparación, por ejemplo

1 es menor 2.19.1
2.20 es mayor a 2.19.1
2.19 es menor a 2.19.1
3.0 es mayor a 2.19.1
etc

Para esto puedes usar este Asynctask que realiza lo anteriormente descrito:

class updateApplication extends AsyncTask<Void, String, String> {

    @Override
    protected String doInBackground(Void... voids) {
        String newVersion = null;
        try {
           Document document = Jsoup.connect("https://play.google.com/store/apps/details?id=" + getApplicationContext().getPackageName()  + "&hl=en")
                    .timeout(30000)
                    .referrer("http://www.google.com")
                    .get();
            if (document != null) {
                Log.d("updateAndroid", "Document: " + document);
                Elements element = document.getElementsContainingOwnText("Current Version");
                for (Element ele : element) {
                    if (ele.siblingElements() != null) {
                        Elements sibElemets = ele.siblingElements();
                        for (Element sibElemet : sibElemets) {
                            newVersion = sibElemet.text();
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;

    }

    @Override
    protected void onPostExecute(String onlineVersion) {
        super.onPostExecute(onlineVersion);
        Log.d("updateAndroid", "Current version: " + currentVersion + " PlayStore version: " + onlineVersion);
        if (onlineVersion != null && !onlineVersion.isEmpty()) {
            if(isUpdateRequired(currentVersion, onlineVersion)){
                Log.d("updateAndroid", "Update is required!!! Current version: " + currentVersion + " PlayStore version: " + onlineVersion);
                openPlayStore(); //Open PlayStore
            }else{
                Log.d("updateAndroid", "Update is NOT required!");
            }
        }    

    }

    private void openPlayStore(Context ctx){
        final String appPackageName = ctx.getPackageName();
        try {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
        } catch (android.content.ActivityNotFoundException anfe) {
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
        }
    }

    public boolean isUpdateRequired(String versionActual, String versionNueva) {
        boolean result = false;
        int[] versiones = new int[6];
        int i = 0, anterior = 0, orden = 0;
        if(versionActual != null && versionNueva != null){
            try{
                for(i = 0; i < 6; i++){
                    versiones[i] = 0;
                }
                i = 0;
                do{
                    i = versionActual.indexOf('.', anterior);
                    if(i > 0){
                        versiones[orden] = Integer.parseInt(versionActual.substring(anterior, i));
                    }else{
                        versiones[orden] = Integer.parseInt(versionActual.substring(anterior));
                    }
                    anterior = i + 1;
                    orden++;
                }while(i != -1);
                anterior = 0;
                orden = 3;
                i = 0;
                do{
                    i = versionNueva.indexOf('.', anterior);
                    if(i > 0){
                        versiones[orden] = Integer.parseInt(versionNueva.substring(anterior, i));
                    }else{
                        versiones[orden] = Integer.parseInt(versionNueva.substring(anterior));
                    }
                    anterior = i + 1;
                    orden++;
                }while(i != -1 && orden < 6);
                if(versiones[0] < versiones[3]){
                    result = true;
                }else if(versiones[1] < versiones[4] && versiones[0] == versiones[3]){
                    result = true;
                }else if(versiones[2] < versiones[5] && versiones[0] == versiones[3] && versiones[1] == versiones[4]){
                    result = true;
                }
            }catch (NumberFormatException e){
                Log.e("updateApp", "NFE " + e.getMessage() + " parsing versionAct " + versionActual + " and versionNew " + versionNueva);
            }catch (Exception e){
                Log.e("updateApp", "Ex " + e.getMessage() + " parsing versionAct " + versionActual + " and versionNew " + versionNueva);
            }
        }
        return result;
    }

}

para obtener la versión actual en tu aplicación instalada lo puedes realizar de esta forma:

public String getVersionActual(Context ctx){
    try {
    return ctx.getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return "";
    }
}

¿Obtener versión de aplicación Android?

Por lo tanto cada vez que se abra la aplicación puedes llamar el Asynctask que realiza el trabajo de esta forma:

new updateApplication().execute();
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *