Il multitasking in Mango – Fast App Switching e il nuovo ciclo di vita delle applicazioni
Posted by qmatteoq in Windows Phone Tutorials on Wednesday 01 June 2011 at 10:00 AM
Iniziamo con questo primo post ad analizzare le novità per gli sviluppatori introdotte in Mango e partiamo da una delle feature a me più care, alla quale ho dedicato anche una sessione al WhyMCA: il multitasking.
Se abbiamo seguito il MIX, sappiamo che Windows Phone non implementa il multitasking in maniera tradizionale (alla Windows Mobile 6.5 o Android per intenderci, dove tutte le applicazioni rimangono effettivamente aperte e funzionanti fino a che non vengono esplicitamente terminate), ma offre una serie di servizi che permettono di eseguire alcuni tipi di operazioni in background e di passare velocemente da un’applicazione all’altra, senza incidere in maniera drastica sulle performance e sulla batteria.
Nelle prossime settimane parleremo perciò di Fast App Switching, di background agents, background audio e background transfers.
Iniziamo oggi parlando di Fast App Switching e del nuovo ciclo di vita delle applicazioni, introdotto per dare la possibilità all’utente di passare velocemente da una applicazione all’altra, eliminando (anche se non del tutto, come vedremo) il fastidioso messaggio Resuming che viene visualizzato nel momento in cui l’applicazione viene “risvegliata” dalla sospensione.
Le demo mostrate sia al Mobile World Congress che al MIX dovrebbero avervi fatto capire chiaramente che cos’è il Fast App Switching: il passaggio da una applicazione all’altra (nello specifico, si trattava di un gioco, Rise Of Glory) avveniva istantaneamente. L’utente era in grado di premere il pulsante Back e nel giro di un paio di secondi riprendere a giocare tranquillamente: oggi questo non è possibile, dato che quando un’applicazione viene sospesa il processo viene terminato perciò, quando questa viene riattivata, deve essere inizializzata da capo e deve essere recuperato lo stato dal tombstone. Se volete rinfrescarvi la memoria, vi rimando alla lettura dei post che avevo dedicato a suo tempo al ciclo di vita delle applicazioni Windows Phone 7.0. (Post 1 – Post 2 – Post 3)
E’ ovvio perciò che l’introduzione di questa feature debba aver cambiato questo ciclo di vita, dato che non è possibile che un’applicazione terminata venga riportata in vita in un tempo così breve. Vediamo perciò uno schema che rappresenta il nuovo ciclo di vita di Mango:
La novità sta nell’introduzione di un nuovo stato, chiamato Dormant, in cui il processo non è più terminato, ma semplicemente sospeso. Come vedremo nel post successivo, il sistema operativo adotterà tutta una serie di accorgimenti per ridurre al mimimo l’impatto sulle performance e sulla batteria (terminando ad esempio tutti i thread e chiudendo tutte le connessioni alla rete), ma l’applicazione fondamentalmente è ancora “viva”. Ecco perchè è possibile avere un restore così veloce! Il sistema dovrà solamente ricollegare le risorse che sono state disconnesse, ma non dovrà reinizializzare l’applicazione da capo.
Come possiamo vedere nello schema, però, lo stato Tombstoned esiste ancora: inoltre, abbiamo ancora la necessità di salvare lo stato della nostra applicazione nel momento in cui questa viene sospesa. Mantenere troppe applicazioni in stato Dormant, infatti, può influire negativamente sulle prestazione del telefono: nel momento in cui la memoria disponibile non sia sufficiente, il sistema operativo è in grado di portare le applicazioni più vecchie nello stato Tombstoned. In questo caso, il ciclo di vita diventa lo stesso delle applicazioni Windows Phone attuali: il processo viene terminato e, nel caso in cui l’applicazione venga riattivata, questo viene reinizializzato e lo stato recuperato dal tombstone.
La differenza rispetto al passato è che ora lo stato dobbiamo recuperarlo solo nel momento in cui l’applicazione è in Tombstoned: se si trovava in stato Dormant, infatti, non è necessario, essendo il processo ancora attivo. A questo scopo ci viene in aiuto una proprietà esposta dalla classe ActivatedEventArgs, la cui istanza viene restituita tra i parametri di ritorno del metodo Application_Activated esposto nell’App.xaml.cs. Questa proprietà di tipo booleano si chiama IsApplicationStatePreserved e ha valore true se l’applicazione proviene da uno stato Dormant, false se invece proviene dallo stato Tombstoned. Ecco lo scheletro del metodo Application_Activated in cui idealmente gestiamo questa casistica:
private void Application_Activated(object sender, ActivatedEventArgs e)
{
if (e.IsApplicationInstancePreserved)
{
//Ricollego le risorse disconnesse
}
else
{
//Recupero lo stato dal tombstone
}
}
Nel prossimo post
Nel prossimo post vedremo più in dettaglio cosa succede quando un’applicazione va in stato Dormant: vedremo inoltre come possiamo debuggare il passaggio da uno stato all’altro, aiutandoci con un piccolo progetto di esempio. Alla prossima!
I nuovi tool di sviluppo per Mango in dettaglio
Posted by qmatteoq in Windows Phone Tutorials on Monday 30 May 2011 at 10:00 AM
Come promesso, iniziamo a vedere qualche dettaglio tecnico di Mango dal punto di vista di uno sviluppatore e partiamo proprio dalla nuova versione dei tool di sviluppo, rilasciata settimana scorsa.
I tool di sviluppo si installano sopra la versione corrente dei tool, perciò non avete bisogno di disinstallarli prima di procedere: l’unico accorgimento è che, come da tradizione Microsoft, le versioni beta dei tool non sono localizzate. Se perciò avete installata sul vostro computer la versione italiana dei tool, solo in questo caso dovrete disinstallarli prima di installare la nuova beta.
One tool to rule them all
Come anticipato nel post dedicato al lancio di Mango, i nuovi tool di sviluppo hanno la caratteristica di prevedere due target diversi per i progetti mobile: Windows Phone 7.0 (che rappresenta la versione corrente installata sui device in commercio) e Windows Phone 7.1 (che rappresenta invece Mango). Questo significa che potremo utilizzare un’unica versione per lavorare su entrambe le piattaforme: in questo modo possiamo continuare a sviluppare e mantenere applicazioni da pubblicare sul Marketplace, senza però perdere la possibilità di iniziare a sperimentare con le nuove API. Si tratta sicuramente di una feature molto gradita, considerando il fatto che come saprete tool di sviluppo e macchine virtuali non vanno molto d’accordo, dato che l’emulatore è una virtual machine esso stesso.
Per i nuovi progetti, una volta selezionato uno dei template disponibili per le applicazioni Windows Phone, vi verrà chiesto il target; per i progetti già esistenti, invece, troverete la voce Upgrade to Windows Phone 7.1 facendo clic con il tasto destro sul progetto.
Occhio però che ci sono un paio di accorgimenti da tenere a mente: il primo è che il nuovo emulatore contiene l’immagine del sistema operativo di Mango. Questo significa che il testing dell’applicazione sull’emulatore non è affidabile al 100%, in quanto la versione dell’OS differisce da quella installata sui device in commercio. E’ perciò importante testare sempre le vostre applicazioni su un device reale prima di fare il submit sul Marketplace.
Il secondo accorgimento è quello di prestare attenzione ai report del Marketplace in caso di fallimento del processo di certificazione: se vi segnalano problemi che voi non riscontrate, il disclaimer “con i tool di sviluppo per Mango la mia applicazione funziona perfettamente” non è accettato, dato che le applicazioni vengono testate e certificate per Windows Phone 7.0. In quel caso, l’unica soluzione è fare il revert e tornare ai tool ufficiali, oppure procurarsi un altro computer dove fare il testing.
I nuovi template
Rispetto alla versione ufficiale dei tool, Mango introduce diversi nuovi template predefiniti tra quelli disponibili nella categoria Silverlight for Windows Phone:
- Windows Phone 3D Graphics Application: questo template crea lo scheletro base per la realizzazione di un’applicazione che sfrutti la nuova interoperabilità tra XNA e Silverlight (ovvero la possibilità di realizzare applicazioni tradizionali in grado però di renderizzare in uno specifico controllo grafica XNA).
- Windows Phone Audio Playback Agent: questo template crea un progetto base per la realizzazione di un background agent di tipo audio, da utilizzare nelle applicazioni che fanno uso delle nuove API per la riproduzione di audio in background.
- Windows Phone Audio Streaming Agent: analogo a quanto sopra, solo che è dedicato alle applicazioni che fanno uso di audio in streaming.
- Windows Phone Task Scheduler Agent: questo template viene utilizzato per lo sviluppo di background agents, ovvero la tecnologia introdotta in Mango che ci da la possibilità di eseguire operazioni in background anche quando la nostra applicazione è chiusa.
Le novità dell’emulatore
La nuova versione dell’emulatore non si limita però a portare con sé una immagine minimale di Mango, ma introduce anche una serie di tool che facilitano il testing di scenari che prima ci erano preclusi. Sto parlando dell’utilizzo dei sensori di movimento e dei servizi di geolocalizzazione. Questi tool sono accessibili premendo il pulsante >>, visualizzato nella barra dei comandi dell’emulatore sotto il simbolo della lente d’ingrandimento.
L’accelerometro
Per testare applicazioni che fanno uso dell’accelerometro i nuovi tool ci mettono a disposizione un render 3D di un generico device, che possiamo ruotare a piacimento usando il mouse. Le rotazioni del render 3D scateneranno gli eventi della classe Accelerometer che rilevano la posizione del device nello spazio: in questo modo, se la nostra applicazione prevede modalità di interazione basate sul movimento, saremo in grado di testarla senza avere per forza a disposizione un device reale.
In più, il tool inlcude una serie di gestures predefinite, che possiamo simulare: al momento, l’unica gesture disponibile è Shake, che simula una serie di scosse decise al device.
Nota molto importante: questo nuovo tool permette di simulare solo gli eventi scatenati dalla classe Accelerometer. Attualmente, non sono supportate le nuove classi di Mango per la gestione dei sensori di movimento, come Motion, Gyro e Compass.
I servizi di geolocalizzazione
I servizi di geolocalizzazione sono un’altra feature che era impossibile testare con l’emulatore, se non utilizzando il tool GPS Emulator di cui vi ho parlato nel mio articolo pubblicato su MSDN Italia. Inoltre, anche con un device reale, non era così semplice testare la localizzazione, soprattutto in caso di applicazioni che non si limitano ad una rilevazione spot della posizione (es., un client Twitter) ma che hanno bisogno di un tracciamento preciso e continuo (es., un navigatore satellitare).
Questo nuova utility integrata nei tool si comporta come GPS Emulator, ma in meglio: essendo integrata con i tool, infatti, non richiede l’utilizzo di una libreria a parte ma si aggancia direttamente alle API native (la classe GeoCoordinateWatcher) esposte dal device.
Il tool mette semplicemente a disposizione una mappa di Bing, sulla quale possiamo posizionare dei segnaposto: ogni posizionamento fa scatenare l’evento PositionChanged della classe GeoCoordinateWatcher, il quale riceverà le coordinate del segnaposto. Possiamo anche inserire più segnaposto e, disabilitando la modalità Live con l’apposito pulsante e premendo il bottone Play, simulare un percorso: in questo modo la nostra applicazione riceverà in automatico una notifica ogni qualvolta verrà simulato lo spostamento da un segnaposto all’altro.
Cosa ci aspetta nel futuro?
Al MIX Microsoft ha annunciato una serie di altri tool che andranno a integrarsi con l’emulatore: sto parlando di Isolated Storage Explorer, che ci permetterà di accedere all’isolated storage della nostra applicazione e navigarne il file system, e di una utility per scattare screenshot, molto utile in fase di submit sul Marketplace.
Al momento questi due tool non sono ancora presenti nella beta corrente: è probabile però che Microsoft rilasci delle beta intermedie prima della versione finale, perciò dobbiamo solo aspettare ![]()
Windows Phone Workshop One: it’s Mango time!
Posted by qmatteoq in Developers , Events Windows Phone on Friday 27 May 2011 at 10:00 AM
Roberto Freato e Andrea Romeo di DotNetLombardia hanno organizzato un evento interessantissimo per chiunque sia interessato allo sviluppo di applicazioni per Windows Phone: l’evento, chiamato Windows Phone Workshop One, si terrà il 23 Giugno in sede Microsoft e sarà una giornata di approfondimento su tutte le novità per gli sviluppatori introdotte in Mango.
L’idea è quella di realizzare un’applicazione completa dall’inizio alla fine (stiamo ancora fissando le idee su quale sarà il risultato finale, vi terrò aggiornati): partendo dallo studio di User Experience e terminando con il deploy sul Marketplace, ogni speaker presenterà una delle nuove feature di Mango e mostrerà concretamente come implementarla all’interno dell’applicazione. Poche slide e molto codice insomma!
L’agenda non è ancora definitiva al 100%, ma potete farvi un’idea degli argomenti che verranno trattati: SQL CE, multitasking e background agents, integrazione con Azure, ecc.
Io avrò il grandissimo piacere di dare il mio contributo con il keynote (in cui faremo un breve riassunto delle novità di Mango e dei nuovi tool di sviluppo) e con una sessione, in cui svilupperò la parte dell’applicazione che farà uso di background agents, live tile e notifiche locali.
Come da tradizione per ogni evento community che si rispetti, il workshop è completamente gratuito e aperto a tutti. Cosa aspettate a iscrivervi? Vi lascio con il link al sito ufficiale dell’evento, che verrà aggiornato nel tempo man mano che nuove informazioni saranno disponibili:
http://wp7one.dotnetlombardia.org/
Mango svelato e disponibilità dei tool di sviluppo!
Posted by qmatteoq in Windows Phone Consumer on Wednesday 25 May 2011 at 10:00 AM
Mango è qui! O quasi
Ieri infatti Microsoft ha tenuto un evento a New York dove ha presentato ufficialmente le novità lato utente che verranno introdotte nella prossima release di Windows Phone. C’è stato spazio anche per gli sviluppatori: la presentazione è infatti coincisa con il lancio pubblico della prima beta dei tool, che consente lo sviluppo di applicazioni usando le oltre 1500 nuove API introdotte in Mango.
Potete scaricare i nuovi tool da qui: si installeranno sopra la versione attuale e vi daranno la possibilità, in fase di creazione di un nuovo progetto, di scegliere se sviluppare un’applicazione per Windows Phone 7.0 (la versione attuale) o Windows Phone 7.1 (il nome provvisorio dato a Mango). In questo modo, potrete utilizzare un’unica versione sia per fare esperimenti che per mantenere le applicazioni che avete attualmente sul Marketplace (o che vorrete sviluppare e pubblicare sul Marketplace nei prossimi mesi).
Microsoft ha inoltre aggiornato la documentazione per gli sviluppatori, inserendo anche nuovi esempi di codice e hands-on-lab. Ma non voglio soffermarmi troppo ora sui tool di sviluppo: nelle prossime settimane pubblicherò una serie di tutorial che andranno a coprire in profondità più o meno tutte le novità.
Parliamo invece delle novità consumer, che sono veramente tante e che innalzano di una spanna la qualità generale del sistema operativo, che ora a mio parere non teme più il confronto con gli altri OS concorrenti. Le novità sono state raggruppate in tra ambiti differenti: Comunicazione, Connettività e Applicazioni.
Comunicazione
Per quanto riguarda questo aspetto, Microsoft ha puntato molto su un’integrazione ancora più profonda con i social network, nonchè su una serie di migliorie ad Outlook e all’organizzazione dei nostri contatti.
- Outlook: sono fondamentalmente due le novità principali relative alla gestione della posta. La prima sono le Linked Inbox, che ci danno la possibilità di collegare tra di loro diversi account di posta e gestirli come se si trattasse di uno solo. Un approccio molto più intelligente, a mio avviso, di quanto fanno alcune piattaforme concorrenti offrendo un’unica vista di tutte le mail ricevute, creando così confusione tra mail personali e mail professionali. L’altra novità è il supporto alle conversazioni, che sono identificate da una barra posta a lato della mail: facendo tap sulla conversazione, l’intero thread viene espanso.
- Maggiore integrazione con i social network: Windows Phone offre già un ottimo grado di integrazione con Facebook, che in Mango verrà ulteriormente espanso, con il supporto ai check in di Places e al tagging delle foto direttamente in fase di upload. In più, ci sarà il supporto nativo a Twitter e LinkedIn.
- Supporto nativo alle chat di Facebook e Messenger: Mango supporterà nativamente la chat con i nostri contatti di Facebook e Messenger in un modo decisamente originale; entrambe le chat infatti confluiranno nell’hub Messagging, quello attualmente dedicato agli sms. In questo modo, si creerà un flusso di comunicazione unico con i nostri contatti in base al miglior servizio disponibile in quel momento (se l’utente è connesso a Messenger useremo la chat, se è disconnesso gli invieremo un sms).
- Threads: sotto questo generico “cappello” vengono indicate una serie di feature che ci permettono di tracciare lo storico delle comunicazioni con i nostri contatti. L’hub People ora è in grado di mostrare più informazioni (ad esempio, le immagini caricate sui social network) e di mostrare tutte le conversazioni avute con una persona, indipendentemente dal mezzo utilizzato (mail, sms, chat, ecc.)
- Servizi vocali avanzati: Mango ci darà la possibilità di interagire con i nostri contatti via chat e via sms semplicemente dettandone il testo.
- Gruppi: sarà possibile raggruppare i contatti in gruppi e interagire con essi grazie a chat di gruppo e a invii multipli di mail o sms. In più, le nuove funzionalità di raggruppamento delle informazioni introdotte per i singoli contatti saranno disponibili anche per i gruppi.
Connettività
Per quanto riguarda la connettività con Internet, ovviamente la parte del leone la fa Internet Explorer 9, con il suo supporto nativo ad HTML5 e all’accelerazione hardware. Non da meno sono però i nuovi servizi integrati in Bing e che saranno accessibili premendo il pulsante Search del device:
- Bing Audio, una sorta di Shazam integrato, permetterà di riconoscere titolo e autore di una canzone semplicemente facendola ascoltare al device.
- Bing Vision: tramite l’accesso allo stream della fotocamera, è in grado di riconoscere oggetti fisici e di trovare informazioni ad esso collegate sul web. Nell’evento di Milano Luca Callegari di Microsoft Italia ha utilizzato questa funzione puntando il device verso la copertina di un libro. Windows Phone ha riconosciuto titolo e autore del libro e ha dato la possibilità di avere maggiori informazioni, di vedere le recensioni degli utenti nonchè di acquistarlo online dalle principali librerie sul web.
- Local scout: avete presente Around Me, la celebre applicazione che consente di trovare i punti di interesse intorno ad un luogo? Ecco, Local Scout svolge la stessa funzione, solo offrendo un’esperienza molto migliore in quanto integrata direttamente nel device, senza bisogno di usare applicazioni di terze parti.
- Cards: avevamo già avuto un assaggio al MIX di questa funzione, che permette agli sviluppatori di agganciare le loro applicazioni ai risultati della ricerca (l’esempio mostrato è la ricerca di un film, alla quale si può agganciare l’applicazione IMDB per mostrare i dettagli del film scelto).
Applicazioni
Non mi soffermerò molto su questo punto, dato che Microsoft si è limitata ad enfatizzare alcune delle novità già note agli sviluppatori e presentate al MIX, come il multitasking o il supporto alle live tile multiple. E’ stata però l’occasione per Microsoft per presentarle in una forma meno tecnica e più comprensibile per i consumatori, parlando dei vantaggi che queste avranno per l’utente finale piuttosto che dei dettagli tecnici sull’implementazione.
Nuovi vendor
Microsoft ha colto l’occasione per presentare nuove partnership con nuovi vendor, che entreranno sul mercato già con telefoni dotati di Mango: sto parlando di Acer, Fujitsu e ZTE (una compagnia cinese che probabilmente si distinguerà per una proposta di device dal prezzo più contenuto) e, ovviamente, Nokia.
Arrivederci in autunno!
Non c’è una data ufficiale di rilascio di Mango: il periodo però sarà quello autunnale o, in gergo, la Holiday Season per gli americani (che è il periodo che va dal giorno del Ringraziamento fino a Natale). E’ stato confermato comunque che l’aggiornamento verrà rilasciato gratuitamente e per tutti i device attualmente in commercio. Non ci resta che aspettare con ansia ![]()
Vi lascio con un video di Joe Belfiore in cui vengono mostrate dal vivo molte delle novità di cui vi ho parlato in questo post. In più, vi segnalo il post ufficiale del team di Windows Phone e un post fatto sul blog ufficiale di Live in cui viene spiegata in dettaglio l’integrazione con Messenger. E se siete sviluppatori, non preoccupatevi: il post di oggi è stata solo una parentesi, a breve tornerò ad annoiarmi con tecnicismi vari come tutorial ed esempi di codice sulle tante nuove API introdotte in Mango ![]()
Colgo infine l'occasione per ringraziare Lorenzo per avermi dato la possibilità di partecipare all'evento di ieri, in una location spettacolare (l'ultimo piano del Pirellone a Milano) e con dolci e pietanze tutte rigorosamente a base di mango :)
WhyMCA Conference 2011: the week after
Posted by qmatteoq in Developers Events on Monday 23 May 2011 at 10:00 AM
Venerdì e sabato si è tenuto a Milano il WhyMCA, una delle più importanti conferenze italiane dedicate al mobile a 360°, con track dedicate allo sviluppo per iOS, Android , Windows Phone e crossplatform.
Innanzitutto voglio fare i miei complimenti ad Alfredo e a tutti gli altri organizzatori dell’evento: se consideriamo che la conferenza è solo al suo secondo anno ed è riuscita a radunare più di 400 persone, possiamo definire il risultato davvero eccellente! Non posso dare un giudizio sulla qualità delle sessioni, dato che non ne ho seguite tantissime: su Twitter mi è capitato di leggere a volte commenti piuttosto negativi di persone deluse da questa o quell’altra sessione. Personalmente, non condivido i toni pesanti usati da alcune persone: in primis, perchè si tratta di un evento community e completamente gratuito, il cui scopo reale è quello di creare aggregazione tra le persone, interesse verso il mondo mobile e nuove occasioni di collaborazione e conoscenza. In più, in un evento di questo tipo, con sessioni della durata di meno di un’ora, non si può pensare di entrare e uscire trasformati in guru sull’argomento: l’obiettivo deve essere quello di fornire le basi e far scattare quella scintilla di curiosità che poi ci spinge, una volta tornati a casa, ad approfondire le tematiche che ci hanno colpito di più.
Polemiche a parte, personalmente mi ha fatto molto piacere vedere un crescente interesse verso Windows Phone: il numero di persone che nell’arco dei due giorni si è affollata attorno al banchetto di Microsoft per avere informazioni più approfondite sulla piattaforma e sulle possibilità per lo sviluppo di applicazioni è stato decisamente elevato. In più, la giornata di Sabato è stata un’ottima occasione sia per fare il punto sulla situazione attuale, sia per lanciare Mango, con una serie di sessioni di approfondimento sulle principali novità.
Per quanto riguarda il sottoscritto, ho proposto una sessione dedicata al multitasking in Mango, offrendo una panoramica sulle novità introdotte, sia in termini di passaggio veloce da un’applicazione all’altra (il nuovo ciclo di vita), sia in termini di operazioni che le nostre applicazioni possono eseguire in background (Alarms, Background Transfers, Background Agents, ecc.). Ricordo, come ho detto sia all’inizio che alla fine della sessione, che sono a completa disposizione nel caso abbiate dei dubbi su quanto vi ho esposto: il form di contatto del mio blog è lì per questo ![]()
Se non avete avuto modo di partecipare, ho pubblicato su SlideShare le slide che ho preparato: in più, fra qualche settimana saranno disponibili sul sito ufficiale le registrazioni delle sessioni.
Chiudo il post rinnovando i complimenti agli organizzatori e ringraziando per avermi dato la possibilità di dare il mio contributo in questa bellissima occasione!
Sviluppare e testare applicazioni geolocalizzate con GPS Emulator
Posted by qmatteoq in Windows Phone Tutorials on Thursday 19 May 2011 at 10:00 AM
Vi segnalo che su MSDN Italia è stato pubblicato un mio articolo in due parti su come sviluppare un’applicazione che fa uso dei servizi di geolocalizzazione di Windows Phone e su come testarla con GPS Emulator, un tool sviluppato dal team di Windows Phone che vi permette di simulare la posizione del segnale GPS fissando dei punti su una mappa di Bing Map.
Se vi interessa l’argomento, leggetelo con attenzione: fra qualche giorno pubblicherò un tutorial sul mio blog che vi mostrerà come utilizzare un controllo Bing Maps in un’applicazione Windows Phone e che richiederà come conoscenza base proprio gli argomenti trattati nell’articolo pubblicato su MSDN.
Ecco i link:
- Prima parte: http://blogs.msdn.com/b/italy/archive/2011/05/05/guest-post-sviluppare-e-testare-applicazioni-geolocalizzate-per-wp7-con-gps-emulator-prima-parte.aspx
- Seconda parte: http://blogs.msdn.com/b/italy/archive/2011/05/10/guest-post-sviluppare-e-testare-applicazioni-geolocalizzate-con-gps-emulator-seconda-parte.aspx
Buona lettura!
Altre novità su Mango svelate al TechEd North America
Posted by qmatteoq in Windows Phone Consumer on Tuesday 17 May 2011 at 10:00 AM
Con l’avvicinarsi del 24 di Maggio stanno emergendo pian piano altre informazioni riguardo le novità che verranno introdotte in Mango dal punto di vista dell’utente finale. Se siete sviluppatori o professionisti del mondo IT (legato soprattutto agli ambienti Microsoft), saprete che ieri è iniziato il Tech Ed ad Atlanta, una delle più importanti conferenze del settore.
Il taglio, rispetto al MIX ad esempio, è molto più “business”: ecco perciò che si è parlato soprattutto di cloud, di ALM e di virtualizzazione. C’è stato spazio però anche per Windows Phone: Microsoft ha infatti colto l’occasione per presentare alcune novità che verranno introdotte in Mango pensate soprattutto per il mondo business. Vediamole insieme:
- Novità in Outlook: verrà introdotta la possibilità di raggruppare le mail per conversazione e di “pinnare” direttamente in home page le cartelle della nostra casella, così da poterci accedere più agevolmente. In caso di account Exchange, inoltre, avremo inoltre la possibilità di estendere la ricerca non solo alle mail scaricate sul device ma anche a quelle più vecchie memorizzate sul server.
- Integrazione con Office 365 e Skydrive: del supporto a Skydrive incluso in Office si sapeva già, l’integrazione con Office 365 è invece una novità molto gradita, che ci darà la possibilità di caricare e modificare i documenti salvati nel cloud direttamente dal device.
- Lync: Lync è il nuovo strumento di comunicazione aziendale introdotto con Office 365. Potete pensarlo come una sorta di Messenger aziendale, che offre servizi di instant messaging, video conferenza, condivisione file, ecc. Mango integrerà un client Lync, che ci permetterà di interagire con i nostri contatti aziendali esattamente come facciamo con il client tradizionale.
In più, Mango introdurrà tutta una serie di feature minori, ma non per questo meno importanti, come il supporto alle reti Wi-Fi nascoste e a IRM (Information Rights Management), un sistema usato solitamente nelle grandi imprese per proteggere i documenti aziendali (ad esempio, consente di impedire l’inoltro delle mail).
Qualche altra indiscrezione sulle novità consumer
Settimana scorsa la trasmissione Windows Phone Dev Podcast aveva svelato alcune delle novità ancora tenute nascoste che verranno introdotte in Mango per gli utenti finali: questa settimana i creatori della trasmissione non sono stati da meno e hanno avuto modo di darci un altro assaggio di quello che ci aspetterà a fine anno:
- Supporto alla chat direttamente nell’hub People, tramite Messenger e Facebook.
- Restyling grafico dell’hub Games, più in linea con il look & feel dell’XBox 360, e nuove funzioni di sincronizzazione.
- Possibilità di raggruppare i contatti in gruppi, per invii di SMS o mail massivi.
- Possibilità, in fase di riproduzione di musica, di mostrare nella lock screen la copertina del cd che si sta ascoltando.
Si parla inoltre di nuove funzioni per il risparmio della batteria e per l’utilizzo del device come hotspot Wi-Fi. E’ bene sottolineare però che tutte queste novità sono per ora solamente delle indiscrezioni (anche se supportate da screenshot), al contrario delle novità emerse settimana scorsa che erano state presentate da Brandon Watson in persona. Il 24 Maggio comunque è ormai vicino, settimana prossima sapremo con certezza quali funzionalità entreranno a far parte delle novità di Mango.
Vi lascio con una serie di screenshot sia delle funzionalità business presentate al TechEd che di quelle emerse durante il podcast.
![]() | ![]() | ![]() |
![]() | ![]() |
Nuovo aggiornamento delle guidelines di Windows Phone
Posted by qmatteoq in Windows Phone Devs on Monday 16 May 2011 at 10:00 AM
Tramite un comunicato sul blog ufficiale del team, Microsoft ha aggiornato le linee guida che le applicazioni Windows Phone devono rispettare per poter superare la fase di certificazione per la pubblicazione sul Marketplace. Microsoft, inoltre, ha approfittato dell’occasione per introdurre anche alcune modifiche al formato della documentazione.
Vediamo le novità:
Modifiche alle guidelines
2.14 Your application must have distinct, substantial and legitimate content and purpose other than merely launching a webpage.
Questa nuova regola è stata introdotta con lo scopo di limitare le molte applicazioni che fungono da semplice “aggregatore di contenuti” che vengono quotidianamente pubblicate sul Marketplace: in soldoni, non sarà più possibile pubblicare applicazioni che si limitano a visualizzare una serie di link che aprono pagine web su Internet Explorer, ma dovranno offrire un maggior numero di contenuti che sfruttino al meglio le caratteristiche della piattaforma.
3.7 (part) Applications that enable legal gambling in the applicable jurisdiction where legal gambling is allowed may be permitted, subject to the Application Provider's acceptance of additional contract terms.
Questa regola “ammorbidisce” un po’ la linea dura nei confronti di applicazioni legate al mondo delle scommesse, ammettendo quelle legate al mondo delle scommesse legalizzate.
4.7.1 Applicable application tile images
Il team di Windows Phone chiede una maggiore attenzione ai dettagli, invitando gli sviluppatori a realizzare delle icone per le proprie applicazioni che siano rappresentative dell’applicazione stessa.
5.1.3 Application Responsiveness: If an application performs an operation that causes the device to appear to be unresponsive for more than three seconds, such as downloading data over a network connection, the application must display a visual progress or busy indicator.
Le linee guida di Windows Phone imponevano già in passato allo sviluppatori di indicare in maniera visuale (ad esempio, con una progress bar) ogni qualvolta l’applicazione stesse caricando dei dati, bloccando così l’interazione con l’interfaccia. Ora questa regola è stata modificata introducendo un riferimento temporale ben preciso: l’utilizzo di un indicatore visuale è richiesto ogni qualvolta l’operazione di caricamento (e il conseguente blocco della UI) richieda più di tre secondi per essere completata.
6.5.4 The SoundEffect class must not be used to play a continuous background music track in an application.
Anche questa regola era già presente, ma è stata rafforzata: se nelle linee guida precedenti si trattava solamente di un consiglio, ora è invece diventato un obbligo. Non si deve in alcun modo utilizzare la classe SoundEffect di XNA per riprodurre musica in background all’interno della nostra applicazione. L’oggetto disponibile tra le API di Windows Phone per questo scopo è MediaPlayer.
Integrazione con la documentazione MSDN
La nuova documentazione non è più, come in passato, un PDF distribuito tramite App Hub ma è stata integrata nella documentazione MSDN relativa a Windows Phone ed è disponibile all’indirizzo http://go.microsoft.com/fwlink/?LinkID=183220.
Test steps
Nella migrazione al nuovo formato (da PDF a pagine web del portale MSDN) sono stati introdotti i test steps: per ognuno dei punti delle guidelines troverete questa nuova voce che vi indicherà passo per passo quali sono le operazioni da compiere per verificare che quel punto venga rispettato.
Appuntamento al 3 di Giugno!
Queste nuove linee guida saranno valide a partire dal 3 di Giugno: dopo tale data, le applicazioni inviate che non rispetteranno i punti segnalati in precedenza non verranno più accettate. Ovviamente, il mio consiglio è quello di mettervi in pari già da adesso: se avete intenzione di pubblicare un’applicazione prima di tale data, assicuratevi che anche questi nuovi punti vengano rispettati, così da evitare brutte sorprese ed avere problemi poi in futuro.
“A VIP Preview”: un nuovo evento su Mango il 24 Maggio
Posted by qmatteoq in Windows Phone Events on Friday 13 May 2011 at 10:00 AM

Microsoft ha spedito nei giorni scorsi un invito per un evento dedicato a Mango che si terrà il 24 Maggio alle 10 (ora americana). Non ci sono dettagli su cosa verrà presentato, ma il testo dell’invito è abbastanza eloquente:
On May 24th we lift the curtain on the next major release of Windows Phone
ovvero il 24 Maggio sveleremo la nuova versione di Windows Phone.
E’ probabile perciò che in questa data:
- Verrà rilasciata la prima beta dei tool di sviluppo per Mango: al MIX, infatti, era stato fissato il mese di Maggio come data per il rilascio.
- Verranno svelate le novità che introdurra Mango dal punto di vista utente, le quali sono ancora sconosciute per la maggior parte (se escludiamo quelle che sono state svelate al Mobile World Congress, come Internet Explorer 9, l’integrazione con Twitter o il supporto completo a Skydrive).
A suggellare la seconda ipotesi ci ha pensato Brandon Watson, uno dei responsabili dello sviluppo di Windows Phone, che nell’ultimo episodio di Windows Phone Dev Podcast ha anticipato alcune di queste novità:
- Bing Audio: una sorta di Shazam integrato in Bing, che vi permetterà di identificare titolo e autore di una canzone semplicemente facendola “ascoltare” al telefono.
- Bing Visual: un servizio che vi permetterà di scansire codici QR, copertine di libri o cd , codici a barre, ecc. e di visualizzare le informazioni collegate.
- Navigazione integrata in Bing Maps, tramite l’introduzione delle indicazioni vocali turn by turn in grado di guidare l’utente durante il percorso.
- Supporto vocale per gli sms, con la possibilità di dettare un sms invece che scriverlo.
- Supporto integrato per i podcast, con funzioni di ricerca, download e riproduzione.
In più, sono circolate voci (non ancora confermate) di una possibile integrazione di Messenger direttamente all’interno dell’hub People, con la possibilità di spedire messaggi in tempo reale ai nostri contatti in linea.
Vi lascio con una serie di screenshot delle nuove funzionalità e vi do appuntamento dopo il 24 Maggio per scoprire insieme le novità annunciate!
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
Push notifications: realizziamo l’applicazione Windows Phone
Posted by qmatteoq in Windows Phone Tutorials on Wednesday 11 May 2011 at 10:00 AM
Dopo aver messo in piedi il servizio e l’applicazione server necessarie per l’invio delle notifiche push, è giunto il momento di realizzare il client vero e proprio per Windows Phone che riceverà le notifiche. Come già spiegato in precedenza, ogni device che vuole utilizzare le notifiche push deve aprire un canale (identificato da un URL) verso il Push Notification Server di Microsoft. Questo è proprio quello che andremo a fare nell’applicazione: apriremo un canale e, una volta ottenuto l’URL, lo memorizzeremo sul database grazie al servizio WCF che abbiamo creato in precedenza.
Vediamo come fare.
Il client Windows Phone
L’interfaccia grafica che useremo non ha bisogno di commenti: ci limiteremo infatti a inserire un pulsante che, alla pressione, andrà a registrare e aprire il canale. In una applicazione reale, questa operazione potrebbe essere fatta nella pagina delle impostazioni, in cui l’utente può scegliere se attivare o meno la ricezione delle notifiche (ricordatevi che per le notifiche toast questa richiesta è obbligatoria, pena il rifiuto dell’applicazione durante la fase di certificazione).
Partiamo dal vedere cosa succede nel momento in cui premiamo il pulsante per registrare il canale:
private void btnRegisterChannel_Click(object sender, RoutedEventArgs e)
{
Channel = HttpNotificationChannel.Find(CHANNEL_NAME);
if (Channel == null)
{
Channel = new HttpNotificationChannel(CHANNEL_NAME);
Channel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(Channel_ChannelUriUpdated);
Channel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(Channel_ShellToastNotificationReceived);
Channel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(Channel_HttpNotificationReceived);
Channel.Open();
Channel.BindToShellToast();
Channel.BindToShellTile();
}
else
{
Channel.ChannelUriUpdated+=new EventHandler<NotificationChannelUriEventArgs>(Channel_ChannelUriUpdated);
Channel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(Channel_ShellToastNotificationReceived);
Channel.HttpNotificationReceived+=new EventHandler<HttpNotificationEventArgs>(Channel_HttpNotificationReceived);
ChannelUri = Channel.ChannelUri;
}
}
L’oggetto fulcro dell’operazione è Channel, di tipo HttpNotificationChannel. Ogni canale è identificato da un nome ben preciso, che nel nostro caso abbiamo memorizzato in una costante chiamata CHANNEL_NAME.
Come prima cosa, viene richiesto al Microsoft Push Notification Server se esiste già un canale con quel nome, sfruttando il metodo statico Find esposto dalla classe HttpNotificationChannel. In caso non esista, la richiesta non ritornerà alcun oggetto e perciò il nostro oggetto Channel, non essendo mai stato istanziato, sarà a null. In questo caso, andremo a creare il canale prima di effettuare qualsiasi altra operazione, altrimenti sfrutteremo quello già esistente.
Il canale viene creato semplicemente istanziando il nostro oggetto Channel e specificandone il nome. Dopodichè dobbiamo aprire la connessione (tramite il metodo Open) e scegliere a quali notifiche push vogliamo sottoscrivere l’applicazione. Per le notifiche di tipo RAW non c’è bisogno di specificare alcunchè, altrimenti possiamo usare i metodi BindToShellToast per iscriverci alle notifiche toast e BindToShellTile per iscriverci alle notifiche tile.
Dopodichè abbiamo a disposizione una serie di eventi che possiamo sottoscrivere, sia in caso il canale sia appena stato creato sia che esista già.
L’evento ChannelUriUpdated
L’evento principale è ChannelUriUpdated, che viene invocato nel momento in cui la richiesta di apertura del canale è stata elaborata e il MPNS ce ne ha restituito l’URL. Vediamo cosa succede nel momento in cui viene scatenato questo evento:
void Channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
ChannelUri = e.ChannelUri;
PushServiceClient client = new PushServiceClient("BasicHttpBinding_IPushService");
IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
Guid guid;
if (settings.Contains("guid"))
guid = (Guid)settings["guid"];
else
{
guid = Guid.NewGuid();
settings.Add("guid", guid);
}
client.SaveChannelUriCompleted += (obj, args) => MessageBox.Show("Channel saved");
client.SaveChannelUriAsync(e.ChannelUri.ToString(), guid);
}
Il metodo restituisce tra gli argomenti di ritorno, all’interno della proprietà ChannelUri, l’URL del canale, che provvediamo a memorizzare nella variabile ChannelUri. Quello che dobbiamo fare ora è comunicare al nostro servizio WCF che abbiamo un nuovo device che si è registrato da memorizzare nel database: ecco perciò che creiamo una nuova istanza del servizio PushServiceClient, così da poterne utilizzare il metodo SaveChannelUri definito qualche post fa.
Se vi ricordate, abbiamo deciso in fase di definizione del servizio WCF di utilizzare il tipo Guid per identificare univocamente il device: lo stratagemma che utilizziamo è quello, quando il canale viene creato per la prima volta, di salvare nell’Isolated Storage l’id, così che quando l’applicazione verrà avviata le volte successive venga mantenuto sempre lo stesso id. Ecco perciò che andiamo a controllare se tale id esiste nell’Isolated Storage (grazie alla classe IsolatedStorageSettings): in caso negativo ne generiamo uno nuovo. In qualsiasi caso, questo sarà l’id che passeremo al servizio: se ci ricordiamo la definizione del metodo SaveChannelUri, ci penserà lui a determinare se si tratta di una operazione di aggiornamento o di inserimento ex-novo.
Infine, chiamiamo il metodo SaveChannelUriAsync (generato in fase di importazione del servizio da Visual Studio) passando come parameri l’URL del canale e l’id. Ci sottoscriviamo anche all’evento SaveChannelUriCompleted, che viene invocato nel momento in cui il device è stato salvato sul database: il metodo non include alcuna informazione di ritorno, perciò ci limitiamo a mostrare un messaggio a video che notifica l’esito dell’operazione.
Nota importante: ci siamo sottoscritti a questo evento sia in caso di creazione ex-novo del canale che in caso questi esista già. Questo perchè l’URL associato al canale potrebbe cambiare: quello che ci aspettiamo è che, alla creazione del canale, l’evento ChannelUriUpdated venga sempre scatenato. Se il canale esiste già, invece, questo evento potrebbe non essere invocato, nel caso in cui l’URL restituito dal MPNS rimanga invariato.
L’evento ShellToastNotificationReceived
Sappiamo bene che la caratteristica principale delle notifiche toast è quella di poter essere ricevute anche (e soprattutto) quando l’applicazione è chiusa: non tutti sanno però che tali notifiche possono essere intercettate anche ad applicazione aperta, nel caso in cui l’invio della notifica da parte dell’applicazione server coincida con un momento in cui l’utente sta utilizzando la nostra app.
L’evento ShellToastNotificationReceived serve proprio a questo: viene scatenato nel momento in cui riceviamo una notifica toast relativa all’app che stiamo usando in quel momento e possiamo gestirlo nel modo che riteniamo più adatto.
void Channel_ShellToastNotificationReceived(object sender, NotificationEventArgs e)
{
Dispatcher.BeginInvoke(() => MessageBox.Show("Toast received"));
}
In questo semplicissimo esempio ci limitamo a mostrare un messaggio a video, utilizzando il Dispatcher di Silverlight dato che l’evento di callback viene eseguito in un thread diverso da quello che gestisce la UI (e quindi non sarebbe in grado di mostrare il MessageBox).
L’evento HttpNotificationReceived
Le notifiche RAW, al contrario di quelle toast e tile, possono essere ricevute solo ad applicazione aperta: l’evento HttpNotificationReceived viene scatenato proprio nel momento in cui è stata ricevuta una notifica di tipo RAW. Occhio che c’è un particolare rispetto alle altre notifiche: la notifica RAW, potendo veicolare qualsiasi tipo di informazione, contiene uno stream di dati generico e non un on oggetto specifico (come una stringa). Nell’esempio che vediamo qui di seguito, prendiamo lo stream in arrivo e lo convertiamo in una stringa, dato che nell’applicazione server abbiamo fatto l’opposto, ovvero abbiamo convertito la stringa in un array di byte, come possiamo vedere di seguito:
RawPushNotificationMessage raw = new RawPushNotificationMessage
{
RawData = Encoding.ASCII.GetBytes(rawMessage),
SendPriority = MessageSendPriority.High
};
Ecco invece l’evento HttpNotificationReceived vero e proprio:
void Channel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e)
{
string message;
using (StreamReader reader = new StreamReader(e.Notification.Body))
{
message = reader.ReadToEnd();
}
Dispatcher.BeginInvoke(() => MessageBox.Show(message));
}
E per quanto riguarda le notifiche tile?
Per le notifiche tile non esiste alcun evento dedicato, dato che non possono essere intercettate all’interno dell’applicazione: se vogliamo usarle, l’importante è abilitare l’applicazione alla ricezione chiamando il metodo BindToShellTile in fase di creazione del canale.
Testiamo il tutto!
Testare se tutto funziona correttamente è molto semplice: lanciamo contemporaneamente sia l’applicazione client che quella server (facendo tasto destro su entrambi i progetti e scegliendo Debug – Start new istance siamo in grado di lanciarle entrambe, mantenedo il debugger di Visual Studio collegato a tutte e due). Una volta aperto l’emulatore di Windows Phone, premiamo sul pulsante Register channel e rimaniamo in attesa del messaggio di conferma di registrazione del canale. A questo punto possiamo usare l’applicazione server per spedire i tre tipi di notifiche: ricordiamoci che per testare le notifiche tile dobbiamo prima pinnare l’icona in home page, altrimenti l’esito dell’invio sarà negativo.
Conclusione
E’ stato lungo ma è stato un bel viaggio: spero che questa serie di tutorial vi sia servita per familiarizzare con le notifiche push. Ovviamente non vuole essere un tutorial esaustivo al 100%, ma spero che vi abbia fornito almeno le basi per gestire gli scenari reali che andrete a realizzare nelle vostre applicazioni.
Di seguito trovate il link per scaricare il codice sorgente della soluzione con tutti i progetti: client WPF, client Windows Phone e servizio WCF.












Recent Comments