venerdì 11 aprile 2014

Notifiche

INDICE:


1) Scopo
2) Alarm Manager
3) ManagerBroadcastReceiver4) Notifica


1)Scopo

Lo scopo di questo post è spiegare come si realizzano le notifiche, come far ripetere la notifica tutti i giorni.

2) Alarm Manager

Prima di iniziare a parlare di notifiche, vediamo come è possibile rendere le nostre notifiche ripetitive con intervallo giornaliero. Nel mio caso per esempio voglio che al tocco di un bottone "Attiva notifica" viene creato l'allarme con periodicità giornaliera. Interveniamo quindi nel "metodo" mappato per il button Attiva notifica" e scriviamo:





Come prima cosa ho istanziato le SharePreferences per tenere traccia dell'esistenza o meno della notifica che andiamo a settare. Se esiste già inutile rifarla.
Entrando nell' if, di non esistenza della notifica, setto il Calendar per indicare quando deve avvenire la prima notifica, se la vogliamo istantanea settiamo semplicemente calendar = Calendar.getInstance(); e setTimeInMIllis così come ho settato io. Nel mio caso ho semplicemente aggiunto un giorno poichè voglio che la notifica inizia dal giorno dopo. Successivamente istanzio l'Intent che si occupa della creazione vera e propria della notifica (vedremo dopo Myreceiver) e lo setto poi successivamente nel pendingIntent che è l'intent che viene settato nell'alarmManager come si vede da foto. Successivamente istanzio alarmManager e setto la ripetizione (AlarmManager.RTC_WAKEUP), quando deve cominciare (calendar.getTimeInMillis()),
l'intervallo di allarme (AlarmManager.INTERVAL_DAY) e l'intent da lanciare (pendingIntent).


3) ManagerBroadcastReceiver (MyReceiver) - 4) Notifica

La classe sopra citata, MyReceiver, è una classe che estende BroadcastReceiver, quindi eredita il metodo onReceive(Context context, Intent intent){} in questo metodo creiamo, come si può vedere sotto, la notifica vera e propria.




L'oggetto mManager che utilizzo è la classe NotificationManager di android. Il resto è piuttosto parlante.







venerdì 28 febbraio 2014

Pubblicare la parte back-end java del vostro progetto android

INDICE:

1) Scopo
2) Che servizio hosting scegliere
3) Come configurare la macchina acquistata
4) Risultato



1) Scopo 

Lo scopo di questo post è quello di capire come pubblicare i vostri servizi sviluppati in java.
Attualmente se state testando la vostra app, i vostri servizi li chiamerete facendo per esempio : vostroip:8080/nomeServlet?parametri..  l'obbiettivo è quello di fare www.vostrodominio.com/nomeServlet?parametri..


2) Che servizio hosting scegliere

In giro ci sono tante società che offrono server dedicati e non, la maggior parte sono però in php. Aruba è il più utilizzato di tutti, e con il servizio cloud da poco in circolazione, soddisfa anche gli sviluppatori java.
E' quindi consigliato scegliere www.cloud.it,  sia per la stabilità e serietà di assistenza che per la prova gratuita pari a 10 euro di consumi. Cosa molto importante poichè si paga a consumo, come si potrà vedere in fase di preventivo.

Ottenere la prova di 10 euro:
click su prodotti & soluzione -  cloud e computing - prova gratuita "richiedi subito" 



Acquistare il server:
Il server si può configurare a proprio piacimento. Si può scegliere inanzitutto il sistema operativo, tra linux e windows. Io consiglio di scegliere linux, poichè a macchina spenta si potrà spendere meno rispetto windows. La configurazione da me scelta è Centos 6 (64 bit) + Tomcat 7 (+ di conseguenza Java 7). Inizialmente consiglio di prendere una configurazione base, senza aggiunta di RAM o CPU, tanto in futuro potremo cambiare le caratteristiche hardware a nostro piacimento.
Il preventivo è il seguente:


In azzurro vengono indicati i costi calcolati a macchina accesa. A macchina spenta si può notare un consumo pari a 0,002 cent.  Per configurare la macchina basta andare un
click su prodotti & soluzione ->  cloud e computing -> Configuratore 

Proseguendo con l'acquisto, verrà assegnato un ip pubblico al vostro server.

3) Come configurare la macchina acquistata
Una volta ottenuto l'ip pubblico è possibile quindi accedere al server ed effettuare la corretta configurazione per deployare il nostro progetto java. Per utenti linux o osx è necessario solo aprire il terminale ed accedere cosi al server: ssh ippubblico -l root per utenti windows bisogna armarsi di un client come putty; come spiegato qui: http://kb.cloud.it/computing/accesso-ai-cloud-server/connettersi-al-cloud-con-ssh.aspx

Una volta effettuato l'accesso, immettendo il comando java -version, capiamo che versione java ci è stata installata. Andando su un qualunque broswer, facendo ippubblico:8080 entriamo nel manager del nostro tomcat (preinstallato in momento di configurazione del server). Cliccando sul bottone App manager ci viene chiesta la password e username che troviamo settata nel file server.xml situato sotto la cartella di installazione : /usr/share/tomcat7/conf.

Effettuato l'accesso al manager di tomcat, possiamo fare il deploy, selezionando il nostro war esportato da eclipse. Se tutto è andato correttamente, la nostra applicazione sarà deployata sotto l'indirizzo ippubblico:8080/nomedelwar


Il prossimo passaggio è quello di ottenere il dominio, poichè non è corretto, sicuro e carino accedere al proprio sito tramite ip.
Aruba cloud offre la possibilità di acquistare il dominio (attenzione! solo dopo aver fatto un accredito, non sono sufficienti i soldi "regalati" da aruba). Le istruzioni per l'acquisto sono a http://kb.cloud.it/domain-center/servizio-domini.aspx . Cosa molto importante per il corretto funzionamento del dominio è impostare il nostro dns con i parametri di A che corrispondono al nostro ip pubblico, ma anche questo fattore è spiegato molto bene dalla documentazione Aruba. Dopo poche ore, temmpo dovuto alla propagazione del dominio dai server aruba, sarà disponibile il nostro dominio.



Una volta disponibile il nostro dominio, ci accorgeremo che miodominio senza i :8080 non restituisce alcun risultato. Questo è dovuto al fatto che per accedere al nostro progetto dobbiamo accedere direttamente al web conteiner (tomcat). Questo meccanismo non è per nulla sicuro e consigliato, oltre che brutto (vedere propriodominio:8080 non è il massimo). Per risolvere questa incombenza è necessario installare apache 2, un web server che intercetterà le chiamate sulla porta 80, standard http. Il meccanisco da creare sta nell'anteporre apache a tomcat, e girare in modo nascosto,trasparente e quindi sicuro, le chiamate dal web server (apache) al web conteiner (tomcat). Installiamo dunque apache, inserire il seguente comando yum install httpd . Prima di startare il server, assicuriamoci che il firewall sia abilitato per chiamate http (porta 80). Quindi dobbiamo andare in /etc/sysconfig/iptables e verificare che ci sia questa riga:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

A questo punto è corretto anche il firewall.
Ora possiamo  modificare la configurazione di httpd.conf. A me è risultato molto utile consultare i seguenti siti: http://stackoverflow.com/questions/8541182/apache-redirect-to-another-port e
 http://www.mokabyte.it/2004/02/tomcat-connectors-1.htm . Il file httpd.conf dovrà avere settato i seguenti parametri: ServerName loalhost e si dovrà creare un virtual host così composto:
 
<VirtualHost *:80> 
  ProxyPreserveHost On
  ProxyRequests Off
  ServerName www.mydomain.com
  ServerAlias mydomain.com
  ProxyPass / http://localhost:8080/example/
  ProxyPassReverse / http://localhost:8080/example/
</VirtualHost> 

 A questo punto non ci resta che mettere nel connector  presente sul server.xml di tomcat la dicitura proxy=80.

Se ora facciamo: service iptables restart , service httpd start e service tomcat restart
nel broswer eseguiamo miodominio.com e otterremo la pagina di welcome file settato sul web.xml della nostra applicazione deployata.


4) Risultato

 Spero di avervi instradato correttamente, per qualsiasi ulteriore informazione rimango a disposizione!