2011-04-05 16 views
14

Digamos que mi versión de Android de la aplicación 0.1 se instala actualmente en el teléfono del usuario. Cada vez que inician mi aplicación, quiero verificar si hay una versión diferente disponible en Android Market, digamos que esta es 0.2. Si hay una falta de coincidencia entre estas dos versiones, quiero mostrar un cuadro de diálogo solicitando al usuario que actualice la aplicación.Preguntar a los usuarios de la aplicación de Android para actualizar la aplicación si la versión actual <> versión del mercado

Entiendo totalmente que existe un procedimiento de notificación de Android Market para los usuarios, pero en lo que respecta a mis datos de Analytics no es muy efectivo para recordarles a los usuarios actualizar a la nueva versión de la aplicación.

Cualquier idea sería muy útil. Gracias StackOverflowers, chicos rock!

+0

Duplicados: http://stackoverflow.com/questions/3057771/is-there-a-way-to-automatically-update-application-on-android y http://stackoverflow.com/questions/2175945/android-market-application-updates – user432209

+3

Ninguna de esas publicaciones responde esta pregunta. –

+0

http://stackoverflow.com/questions/19244305/force-update-android-app-when-new-version-available/32942785#32942785 – AshuKingSharma

Respuesta

14

El Android Market es un sistema cerrado y sólo tiene una API no oficial que podría romperse en cualquier punto del tiempo .

Su mejor opción es simplemente alojar un archivo (xml, json o texto simple) en un servidor web suyo en el que solo tiene que actualizar la versión actual de su aplicación cuando la publique en Market.

Su aplicación solo tendrá que buscar ese archivo al inicio, comprueba si la aplicación actualmente instalada tiene un número de versión inferior y muestra un cuadro de diálogo para advertir al usuario al que está retrasando.

+0

esto es más o menos lo que pensé ... solo quería comprobar si existe una API que Google ya proporciona para verificar esto cuando sea necesario. – Aakash

4

Echa un vistazo a esta biblioteca que se puede utilizar para consultar la API de Android Market

http://code.google.com/p/android-market-api/

+0

Veo que esto probablemente funciona pero no es una API "oficial" de Google que significa que podría perder soporte o romperse en cualquier momento. ¿Estoy en lo cierto al inferir eso? – Aakash

+0

Es una posibilidad, sí. –

4

Puede utilizar esta biblioteca de Android: https://github.com/danielemaddaluno/Android-Update-Checker. Su objetivo es proporcionar un instrumento reutilizable para verificar asincrónicamente si existe alguna actualización más reciente de su aplicación en la Tienda. Se basa en el uso de Jsoup (http://jsoup.org/) para comprobar si hay una nueva actualización realmente existe analizar la página de la aplicación en Google Play Store:

private boolean web_update(){ 
    try {  
     String curVersion = applicationContext.getPackageManager().getPackageInfo(package_name, 0).versionName; 
     String newVersion = curVersion; 
     newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + package_name + "&hl=en") 
       .timeout(30000) 
       .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") 
       .referrer("http://www.google.com") 
       .get() 
       .select("div[itemprop=softwareVersion]") 
       .first() 
       .ownText(); 
     return (value(curVersion) < value(newVersion)) ? true : false; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

Y como función "valor" de la siguiente (funciona si los valores son beetween 0-99):

private long value(String string) { 
    string = string.trim(); 
    if(string.contains(".")){ 
     final int index = string.lastIndexOf("."); 
     return value(string.substring(0, index))* 100 + value(string.substring(index + 1)); 
    } 
    else { 
     return Long.valueOf(string); 
    } 
} 

Si sólo desea verificar un desajuste beetween versiones, puede cambiar:

"valor (curVersion) < valor (newVersion)" por "valor (curVersion)! = valor (newVersion) "

+0

¿No está analizando el valor de la tienda de aplicaciones una exageración aquí? Sugeriría uno de los métodos enumerados anteriormente: simplemente almacene la clave en el servidor y tráigala a través de una llamada API. –

+0

el objetivo es comprobar la última versión que está disponible actualmente en la tienda (ya que la publicación de una aplicación puede tardar un tiempo en aparecer). sin embargo, todo el html es de unos 350 KB o más (es por eso que @Nitin dijo "overkill"). Si alguien prefiere esto como solución, asegúrese de que su aplicación solo verifique si la conexión WiFi está disponible. –

5

Otra opción que puede utilizar, si desea evitar que su servidor de fondo almacene su versión actual de la aplicación como se sugiere en la respuesta aceptada, es usar Google Tag Manager (GTM).

Si ya está utilizando el SDK de Google Analytics, también tiene el GTM.

En GTM, puede definir un valor en el contenedor para su aplicación que especifique su última versión lanzada. Por ejemplo:

{ 
    "latestAppVersion": 14, 
    ... 
} 

A continuación, se puede consultar ese valor cuando su aplicación se inicia y muestra el recordatorio de diálogo de actualización del usuario si hay una versión más nueva.

Container container = TagManager.getInstance(context).openContainer(myContainerId); 
long latestVersionCode = container.getLong("latestAppVersion"); 

// get currently running app version code 
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
long versionCode = pInfo.versionCode; 

// check if update is needed 
if(versionCode < latestVersionCode) { 
    // remind user to update his version 
} 
+0

¿Utilizaste una etiqueta o una macro? Si macro usaste colecciones de valores? Porque parece que no puedo hacer que funcione. – achabacha322

+1

Utilizo la colección de valores de macro, aquí hay exactamente copiar y pegar de la colección: {"latestAppVersion": 30} – middlehut

0

Para que provocó Android App usuario actualizar la aplicación si la versión actual no es igual a la versión de mercado, debe comprobar primero la versión de la aplicación en el mercado y compararlo con la versión de la aplicación en el dispositivo. Si son diferentes, puede ser una actualización disponible. En esta publicación anoté 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. Visite este enlace: https://stackoverflow.com/a/33925032/5475941

Cuestiones relacionadas