2012-03-24 13 views
44

Ho creato un'app per Android ora su Play Market. Di tanto in tanto, faccio aggiornamenti e mi piacerebbe far sapere agli utenti che è disponibile una nuova versione.Come notificare agli utenti l'aggiornamento di un'app Android?

Come posso inviare un aggiornamento delle notifiche agli utenti dell'app?

+2

Per quanto ho visto, di solito è fatto in-app, vale a dire. quando l'app lo avvia, verifica una nuova versione e visualizza una notifica all'utente da aggiornare. –

+0

Questo progetto GitHub open source (MAHAndroidUpdater) fornisce completamente funzionalità di aggiornamento. Provalo, molto semplice. https://github.com/hummatli/MAHAndroidUpdater –

risposta

59

Non c'è bisogno di fare qualcosa di specifico per questo. Poiché hai menzionato che stai utilizzando Android Play, la notifica di aggiornamento viene gestita da Google Play.

È necessario solo aggiornare l' APK con maggiore versionCode e Google Play dovrebbe fare il resto.

+3

Io cambio l'attributo android: versionCode nel file AndroidManifest.xml ogni volta che modifico il codice, ma non ricevo alcuna notifica sul mio telefono. –

+4

@doledoug, assicurati che 1. Notifiche in Google Play: le impostazioni siano selezionate. 2. Data di sfondo nel telefono Impostazioni - Gli account e la sincronizzazione sono spuntati. – yorkw

+0

@doledoug: potresti non ricevere subito la notifica in quanto dipende dalla riproduzione Android. Assicurati di essere connesso a Internet. – PravinCG

4

Utilizzare questa: https://www.push-link.com/

+0

questo argomento non aggiunge pubblicità o qualcos'altro alla mia app? –

+0

per quanto ne so non ci sarà pubblicità –

8

È possibile farlo in molti modi, a seconda di quando si desidera che l'utente sia in grado di vedere che è disponibile un aggiornamento.

Se si desidera che l'utente conosca l'aggiornamento all'avvio dell'app, è sufficiente creare un metodo di utilità (all'interno del metodo onCreate della propria principale/prima attività) che verifica se è disponibile una versione più recente in Google Play. In tal caso, visualizza una finestra di avviso con un messaggio pertinente e un'intenzione che apre l'app in Google Play quando l'utente fa clic sul pulsante positivo della finestra di avviso. Se si aggiorna l'app regolarmente, l'utente continuerà a ricevere questa finestra di avviso ogni volta che l'app viene avviata e, di conseguenza, potrebbe irritarsi. Quindi, questo non è l'approccio migliore.

Se si desidera che l'utente ottenga una notifica sul telefono (e non quando l'utente avvia l'app), è possibile utilizzare la classe AlarmManager per pianificare un servizio in background che verifica un aggiornamento a intervalli regolari. Se il servizio rileva che un aggiornamento è effettivamente disponibile, pubblica una notifica con l'intento che apre la tua app in Google Play.

Naturalmente, un altro approccio è quello di lasciarlo al sistema operativo stesso. Se l'utente non ha impostato la preferenza "Aggiorna automaticamente" per la tua app, l'utente riceverà regolarmente una notifica relativa a un aggiornamento disponibile per la tua, così come per qualsiasi altra app. Ma non tutti gli utenti abilitano i dati in background sui loro dispositivi, quindi questo non è completamente affidabile.

Alla fine, è necessario rispettare le preferenze degli utenti. Se l'utente non desidera aggiornare automaticamente l'app o non desidera visualizzare una finestra di dialogo fastidiosa ogni volta che avvia l'app, non avvisare l'utente dell'aggiornamento.

A mio parere, è necessario creare un PreferenceActivity con preferenza come "Verifica periodicamente gli aggiornamenti", che è possibile impostare dall'interno dell'app. Se è impostato, fai il necessario nel tuo servizio. Può anche dare all'utente la possibilità di selezionare il periodo dopo il quale il servizio verificherà l'aggiornamento.

Spero che questo aiuti!

+13

Mi piacerebbe * davvero * sconsigliare l'utilizzo di AlarmManager per eseguire l'app in background per verificare la presenza di aggiornamenti. Immagina se ogni app installata dall'utente abbia fatto questo. La tua app non è così importante, ed è scortese sprecare risorse del dispositivo dell'utente come questo. E non usare l'aggiunta di una preferenza come scusa per permetterti di farlo, se la tua preferenza è quella di default. La maggior parte degli utenti non la cercherà mai, ed è proprio quegli utenti che sono più in balia delle prestazioni scadenti dei dispositivi da parte degli sviluppatori di applicazioni abusivi. – hackbod

+2

Come suggerisci si dovrebbe "verificare se una versione più recente è disponibile in Google Play" affidabile. Per quanto ne so io, l'API non è pubblica tranne che per una versione non ufficiale? –

1

Non so se si desidera percorrere miglia extra. Puoi provare google appengine, che fornisce il numero di versione per la tua app e consentire all'app Android di controllare l'appengine per vedere se c'è una nuova versione all'avvio dell'applicazione. In questo modo, non importa se la tua app è su Google Play Market o Amazon App Store, né se è installata sul telefono senza questi due tramite sideloading. Non è molto difficile impostare appengine solo per servire la versione dell'applicazione in json. Sostituisci la stringa "Hello World" con il nome della versione dell'app ...

3

Google Play notificherà ai tuoi utenti che l'app ha un aggiornamento tramite la barra di notifica.

Se si imposta un sistema di notifica autonomamente, il risultato probabile sarebbe che, sebbene all'utente venga notificato prima un aggiornamento, quando si reca su Google Play per installare l'aggiornamento non sarà ancora disponibile. Questo perché c'è un ritardo dal momento in cui "pubblichi" un'app/aggiornamento e il tempo fino a quando non appare su Play. Dire agli utenti che c'è un aggiornamento quando l'aggiornamento non è disponibile porterebbe solo a confusione e frustrazione.

Il mio consiglio: attenersi al sistema di notifica di aggiornamento di Google e non preoccuparsi di provare a ottenere un aggiornamento degli utenti 15 minuti prima.

+1

Non ricevo una notifica da Google Play quando aggiorno il mio file apk con una versione più recenteCodice ... Non capisco perché, ho controllato tutte le impostazioni ecc. – Ted

+0

forse hai aggiunto alcune autorizzazioni per manifest? – AndroidGecko

1

Questo può essere utilizzando un semplice servizio web solo questo è uno dei modi per raggiungere il risultato.

vale a dire, quando mai il lancio dell'applicazione ha colpito il servizio web con la versione corrente dell'app utente e sul server, è necessario verificare se è disponibile o meno una nuova versione (Deve mantenere la versione più recente dell'app) e inviare la risposta corrispondente all'utente. Se è disponibile una versione più recente, chiedere all'utente di scaricare la versione più recente dell'applicazione e, se non è disponibile una versione più recente, consentire all'utente di continuare.

Spero che almeno qualcosa debba esserti utile.

-6
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
android:versionCode="1.5b" 
android:versionName="1.5b"> 

quando si ri-caricare il tuo app per Google Play, se questi due attributi sono stati cambiati dal l'upload precedente, Google Play invierà automaticamente notifiche agli utenti che hanno installato la tua app. Questo è il file AndroidManifest.

+1

Il codice versione accetta solo valori interi –

2

Alcune persone usano Android Cloud-to-Device Messaging (C2DM) per informare gli utenti degli aggiornamenti. Non penso che mi preoccuperei, dato che penso che Google Play faccia un buon lavoro di notifica degli aggiornamenti e l'implementazione di C2DM aggiunga una nuova dimensione alla scrittura di un'app (perché richiede un componente server). Ma forse vuoi offrire ai tuoi utenti una notifica di aggiornamento più ricca di quella che ricevi da Google Play.

9

Spetta a ciascun proprietario del telefono se desidera ricevere una notifica sulle nuove versioni da Google Play, e spetta al produttore di ogni telefono se deve essere abilitato per impostazione predefinita.

Se si è in una situazione in cui si "richiede" all'utente di aggiornare la nuova versione per essere compatibile con qualche forma di protocollo o si dispone di un caso di uso simile simile in cui si dispone di un componente del server da qualche parte, è possibile desidera notificare all'utente un potenziale conflitto di versione nell'interfaccia utente in base alle informazioni su quale è l'ultima versione.

Queste informazioni possono essere acquisite direttamente da Google Play, tuttavia come @Yahel ha sottolineato in this question google play è un sistema chiuso senza API ufficiale e potrebbe essere necessario fare affidamento su API non documentate imprevedibili. C'è un unofficial API library here.

Questo lascia solo un'opzione, che è quella di mantenere queste informazioni sul proprio server. Se hai già un serveride questo potrebbe essere banale. Inserisci semplicemente l'ultima versione in un file XML e recuperala a intervalli regolari dal tuo codice. Se il codice della versione non è aggiornato, attiva la notifica nell'interfaccia utente. Ecco un example implementation per farlo.

Spero che questo è stato utile :-)

0

In genere quando si carica una nuova applicazione Google Play la maggior parte degli utenti di ottenere una notifica su un aggiornamento, alcuni avranno l'applicazione scaricata automaticamente sul proprio dispositivo, a seconda delle impostazioni loro hanno. Se si desidera seriamente effettuare una notifica dalla propria app per chiedere l'aggiornamento (in modo che tutti ricevano la notifica, indipendentemente dalle impostazioni di riproduzione di Google, sarà necessario creare un servizio Web che restituisca il numero della versione più recente. Puoi quindi confrontarlo all'interno della tua app e pubblicare una notifica.Potresti utilizzare Google App Engine (https://developers.google.com/appengine/) perché funziona con eclipse e java, che probabilmente hai già. Non consiglierei questo approccio in quanto crea molto lavoro per voi di fornire qualcosa che la maggior parte degli utenti hanno già ottenuto.

1

ci sono due modelli che sono essenzialmente utilizzati per affrontare la questione.

Pull based 
Push Based 

Dipende dall'architettura o dal design di un particolare sistema che determina se viene utilizzato il meccanismo pull o push.

Per il modello basato su pull è sufficiente effettuare una richiesta http sul server interessato riguardante la nuova versione dell'applicazione. L'attuale versione dell'applicazione no può essere salvata in SQLLite nell'applicazione Android. Questo può essere dato al server e la nuova versione può essere controllata contro di essa sul server.

Per meccanismo push è possibile utilizzare il servizio di notifica push C2DM .. i cui dettagli sono riportati a http://code.google.com/android/c2dm/

2

@ risposta di Davek804 sopra è sbagliato. android: versionCode è un valore intero che rappresenta la versione del codice dell'applicazione, relativa ad altre versioni, quindi l'uso di "1.5b" non è corretto. Utilizzare "15" (o "150") invece

1

Trovato una buona soluzione per il tuo problema: Supponiamo di voler controllare manualmente gli aggiornamenti di versione all'avvio dell'app e di notificare agli utenti il ​​nuovo aggiornamento.

Fase 1: Download android-market-api (non il file .jar, il progetto completo!)

Fase 2: Dopo aver importato a eclissare, scrivere nella vostra attività il seguente codice:

MarketService ms = new MarketService(activity); 
ms.level(MarketService.REVISION).checkVersion(); 

ora, abbiamo bisogno di modificare MarketService.java, perché sembra essere rotto.

Fase 3: riscrivere metodo di callback e aggiungere i seguenti metodi

protected void callback(String url, JSONObject jo, AjaxStatus status){  
     if(jo == null) return; 
     String googlePlayversion = jo.optString("version", "0"); 
     String smartphone_version = ""; 

     PackageInfo pInfo; 
     try { 
      pInfo = act.getPackageManager().getPackageInfo(act.getPackageName(), 0); 
      smartphone_version = pInfo.versionName; 
     } catch (NameNotFoundException e) {} 
     boolean new_version_avaible = compare(smartphone_version, googlePlayversion); 
     if(new_version_avaible){ 
      showUpdateDialog(jo); 
     } 
    } 

    private static boolean compare(String v1, String v2) { 
     String s1 = normalisedVersion(v1); 
     String s2 = normalisedVersion(v2); 
     int cmp = s1.compareTo(s2); 
     String cmpStr = cmp < 0 ? "<" : cmp > 0 ? ">" : "=="; 
     System.out.printf("result: "+"'%s' %s '%s'%n", v1, cmpStr, v2); 
     if(cmpStr.contains("<")){ 
      return true; 
     } 
     if(cmpStr.contains(">")||cmpStr.contains("==")){ 
      return false; 
     } 
     return false; 
    } 

    public static String normalisedVersion(String version) { 
     return normalisedVersion(version, ".", 4); 
    } 

    public static String normalisedVersion(String version, String sep, int maxWidth) { 
     String[] split = Pattern.compile(sep, Pattern.LITERAL).split(version); 
     StringBuilder sb = new StringBuilder(); 
     for (String s : split) { 
      sb.append(String.format("%" + maxWidth + 's', s)); 
     } 
     return sb.toString(); 
    } 

Se volete provarlo, modificare stringa googlePlayversion a una versione superiore a quello locale.

Il metodo di confronto fonte che ho usato è da How do you compare two version Strings in Java?

+0

Perché confrontare i nomi delle versioni quando è possibile confrontare direttamente i codici di versione? – ferow2k

2

C'è anche un ottimo approccio per il controllo di versione e dare all'utente in notifica app o quando si desidera aggiornare con forza la domanda se si può decidere il primo collegamento di la tua app con il server. Nella risposta della prima richiesta puoi inviare la versione corrente dell'app salvata sul tuo server e poi sul client puoi prendere l'azione appropriata. Vantaggi di questo approccio:
1-Nessuna richiesta aggiuntiva per la versione n.
2-È applicabile anche se si sta scaricando l'app diversa da Google Playstore.
3-è possibile utilizzare questa idea anche se si desidera verificare la versione per operazioni particolari della transazione dell'app (se si aggiunge un nuovo gateway di pagamento.)

Problemi correlati