Adesso un po' di appunti tecnici sull'app. Innanzitutto da premettere che il programma in sé consiste in sole 3 componenti: una activity principale che è l'interfaccia utente dove impostare le varie cose, un service in background che si occuperà di effettuare i controlli sulla presenza di eventuali notifiche su Ludomedia e un receveir settato al boot di sistema che si occuperà di avviare il service di background automaticamente all'avvio di Android. Il tutto è stato programmato in modo da richiedere il minor ammontare possibile di risorse e soprattutto agisca in modo abbastanza intelligente da ridurre al minimo il consumo di batteria. Purtroppo, non avendo accesso via server a Ludomedia poiché non ne sono il proprietario, non ho potuto implementare il supporto a GCM (il servizio di notifiche Push ufficiale di Android), quindi ho dovuto optare per un controllo manuale programmato ogni tot minuti. Dunque, com'è ovvio aspettarsi, impostare intervalli di aggiornamenti molto brevi farà avviare i controlli più spesso influendo negativamente sul consumo di batteria. Precisato questo, però, nel creare quest'app però ho cercato di seguire tutte le linee guida che Google stessa mette a disposizione degli sviluppatori nella sua documentazione ufficiale per ridurre al minimo il peso sulle risorse di sistema e sul conseguente consumo di batteria.
Nello specifico ho creato il service di background in modo che:
Rispetti le impostazioni di default dell'utente senza intoccare nulla di sua mano.
Faccia il suo lavoro in un thread separato, ossia in maniera del tutto distaccata dall'activity principale che quindi può essere tranquilla chiusa per liberare risorse di sistema e non deve dunque rimanere anche lei in esecuzione in background per forza.
Ottenga un risveglio solo parziale del sistema e soprattutto lo rilasci una volta che ha finito il suo compito (ossia, detto in altre parole, non mantenga sveglio il sistema indefinitivamente).
Quando ha finito di fare il suo lavoro richiami la funzione standard di autochiusura in modo da liberare le risorse del sistema.
Rispetti quella che in particolare è una delle linee guida più infrante nelle app su Android e che peggio fa adirare gli utenti, ossia evitare che l'app, seppur killata (interrotta) a forza, comunque dopo qualche istante si riavvi ancora da sola. Io invece ho fatto in modo che non si riavvi automaticamente da sola quando il sistema la killa (lo interrompe) nelle situazioni in cui ha bisogno di più risorse.
Mantenga la compatibilità anche con i device aventi una versione di Android più datata grazie all'uso comunque di funzioni deprecate.
Utilizzi gli allarmi di sistema per attivare gli eventi, in modo che il peso di dover calcolare il prossimo controllo non sia sul service di background.
Utilizzi gli allarmi cosidetti “inesatti”, ossia quelli che il sistema, in caso siano vicini tra loro, può raccogliere assieme e farli coincidere nell'esecuzione in modo da ridurre sensibilmente le volte in cui risvegliarsi.
Annulli sempre prima un allarme già impostato nel caso debba resettarlo, evitando quindi il rischio seppur remoto di aver più allarmi con lo stesso scopo in esecuzione.
Aspetti, all'avvio del device, il segnale di boot del tutto completato prima di eseguire le sue operazioni, in modo da non interferire con le routine di avvio del device.
Non esegua subito il controllo appena completato il boot, causando quindi pesantezza all'avvio del device, ma invece utilizzi un allarme così da farlo scattare ed eseguire in modo posticipato, dando dunque al sistema tutto il tempo necessario per assestarsi dopo l'avvio.
Possa essere fermato dall'utente tramite l'interfaccia senza doverlo killare forzatamente.
Blocchi la sua esecuzione programmata in caso di errore di connessione senza andare dunque a ripetere tale errore periodicamente finché l'utente non interviene a sistemarlo.
Oltre a questo, anche il programma in sé segue direttive in modo da ridurre il costo sulle risorse di sistema e sul consumo batteria. Operando essenzialmente sul versante notifiche, nello specifico l'ho programmato in modo che tali notifiche di Android:
Acquisiscano le impostazioni di default: tutto è nelle mani dell'utente dunque, colore di sfondo, vibrazione, suono, colore del LED se supportato, tutto ma proprio tutto delle notifiche viene acquisito dalle impostazioni di default in modo che l'utente possa gestirle come più gli aggrada. Le uniche cose personalizzate nelle notifiche dal programma sono ovviamente il testo e l'icona.
Siano sempre una: con questo intendo che non vengono create nuove notifiche ogni qual volta il programma controlla gli aggiornamenti, ma nel caso sia ancora presente una notifica passata quando si va a notificare nuovamente viene aggiornata tale notifica con il nuovo testo senza andare a crearne una nuova ad hoc e finendo dunque per intasare (soprattutto con intervalli di aggiornamenti brevi) il pannello delle notifiche di sistema.
Notifichino in modo intelligente: nel senso che non vadano a far vibrare e suonare il device ogni qual volta si aggiorni una notifica, ma soltanto quando non sono presenti altre notifiche del programma.
Si chiudano automaticamente quando l'utente preme su di esse.
Si chiudano automaticamente quando l'utente, da un altro PC o device, accede alle notifiche di Ludomedia azzerandole. Il programma infatti è programmato in modo che, nel caso riceva zero nuove notifiche (ossia l'utente, utilizzando un altro mezzo, le ha già lette), vada a controllare se c'è una notifica di sistema presente e in tal caso la rimuove.
In caso di errore di connessione a Ludomedia notifichino tale problema all'utente invitandolo ad intervenire.
Avviino programmi differenti a seconda del contenuto: nel caso infatti siano notifiche regolari premendo su di esse si avvia il browser internet di default del device già indirizzato sulla pagina delle notifiche di Ludomedia, nel caso invece siano notifiche di errore allora premendo su di esse verrà avviata l'applicazione in modo che l'utente intervenga rieffettuando il login e/o riattivando il service in background.
Infine, per quanto riguarda la sicurezza, un paio di precisazioni:
Il programma richiede username e password perché non può operare senza per accedere al vostro account su Ludomedia. In ogni caso tali dati NON verranno salvati dal programma ma utilizzati una tantum per l'acquisizione appunto di cookie e token necessari al login in futuro. Soltanto questi due dati saranno salvati e assolutamente soltanto sul vostro device.
Nonostante vengano salvati solo token e cookie ho voluto comunque dare all'utente la possibilità di poter cancellare (tramite apposita funzione nel programma) tutti i dati salvati in modo da garantirgli il pieno controllo di sicurezza sul programma.
Penso di aver detto tutto sul “modo” in cui ho programmato questa applicazione, se mi son scordato qualcosa o avete ancora altri dubbi non esitate a chiedere, tramite apertura di un issue nella pagina ufficiale di Bitbucket del progetto, oppure contattandomi direttamente su Twitter o via email.
Ho testato personalmente l'app con tutti i dispositivi Android a mia disposizione e posso quindi confermare la compatibilità sicura con i seguenti modelli:
Nexus 4 con Android 4.4.4
Nexus 7 con Android 4.4.4
Xperia P con Android 4.1.2
Altri test positivi sono stati fatti da alcuni utenti di Ludomedia (e ne approfitto per ringraziarli) sui seguenti modelli:
In generale comunque l'app è compilata in modo da supportare tutte le versioni di Android dalla 3.0 in poi.
La procedura di installazione è la classica per ogni APK non proveniente dal Play Store. Proprio per questo vi riporto quella che avevo illustrato per VVVVIDroid visto che, appunto, è la medesima per tutti gli APK (cambia solo il nome del programma):
Attiva l'installazione di applicazioni da sorgenti sconosciute nel tuo dispositivo: vai in
Impostazioni e cerca l'opzione
Sorgenti (o
Origini)
sconosciute (in alcuni dispositivi è nella scheda
Applicazioni, in altri nella scheda
Sicurezza), quindi assicurati che sia attiva come da immagine:
Direttamente dal browser web del tuo cellulare scarica il file APK dal link che puoi trovare qui a destra in questa stessa pagina:
A download terminato ti verrà mostrata una notifica dal tuo browser web:
Clicca sulla notifica e dalla finestra che apparirà scegli la voce
Installa:
In pochi istanti l'app sarà installata e pronta per essere avviata:
Potrai sempre avviare l'app dal menù del tuo dispositivo come qualsiasi normale app installata dal Play Store: