I nuovi servizi di Azure per le applicazioni mobile – La configurazione

Print Content | More

Recentemente Microsoft ha inaugurato gli Azure Mobile Service, una feature della piattaforma cloud più interessanti soprattutto per chi si occupa di sviluppo mobile (Windows 8 e Windows Phone, ma anche piattaforme concorrenti come iOS e Android). Questa nuova funzionalità di Azure permette di creare in maniera semplice e veloce dei servizi da utilizzare in un’applicazione mobile: possono essere servizi generici per memorizzare dati, oppure servizi più specifici come quelli per l’uso delle notifiche push o per l’autenticazione.

In realtà gli Azure Mobile Services non sono una novità in senso assoluto: si tratta di servizi che sono costruiti sull’infrastruttura già esistente di Azure (il servizio stesso è ospitato da un web role, mentre i dati sono memorizzati in un database SQL), sono semplicemente più facili da creare, configurare e gestire.

Nei prossimi post vedremo come usare i mobile services di Azure per creare un semplice servizio, con il quale interagiremo da un’applicazione Windows 8 e da una per Windows Phone. Il servizio che andremo a creare sarà un semplice servizio REST, con il supporto al protocollo OData, che restituisce i dati in formato JSON. Come vedremo, interagire con lo stesso da un’applicazione Windows 8 sarà molto semplice: Microsoft ha infatti rilasciato un add-on per Visual Studio 2012 che aggiunge una libreria, da utilizzare nelle Windows Store apps, che rende molto semplice eseguire operazioni con il servizio.

Windows Phone non è ancora supportato al momento (ma sono sicuro che, appena l’SDK di Windows Phone 8 sarà rilasciata ufficialmente, Microsoft fornirà una libreria ad hoc): in questo caso dovremo lavorare in “modalità manuale”, che sarà utile per capire come interagire con i mobile services anche da un’applicazione non basata su tecnologie Microsoft. In questo caso, dovremo inviare delle richieste HTTP al servizio ed elaborarne la risposta: come vedremo, grazie all’utilizzo di alcune librerie open source, non sarà così difficile.

Prima però di iniziare a scrivere codice, vediamo come configurare gli Azure Mobile Services.

Come attivare i mobile services di Azure

Ovviamente, la prima cosa da fare è assicurarsi di essere in possesso di un account su Azure: se avete un abbonamento MSDN, avete accesso ad una sottoscrizione che include un po’ di traffico e di storage; in caso contrario, è disponibile una free trial semplicemente iscrivendovi a questo indirizzo.

Il passo successivo è abilitare gli Azure Mobile Service: dato che questa tecnologia è ancora in fase di preview, non è abilitata di default. Dovete accedere perciò al portale di gestione dell’account Azure e entrare nella sezione chiamata Preview features: troverete una lista di tutte le opzioni disponibili. Cliccate sul pulsante Try now accanto alla sezione dedicata ai Mobile Services, confermate l’attivazione e il gioco è fatto! Dovreste ricevere dopo pochi minuti una mail di conferma e lo stato della pagina dovrebbe cambiare, mostrandovi il messaggio You are active. 

Come creare il servizio

Ora che la feature è abilitata, possiamo iniziare a configurarla tramite il nuovo portale di gestione: premete il pulsante New b selezionate Create nella sezione chiamata Mobile Services. Nel primo step del wizard dovrete impostare le seguenti opzioni:

  • Il nome del servizio, che costituirà anche la prima parte dell’URL, seguito dal dominio azure-mobile.net (ad esempio, myservice.azure-mobile.net)
  • Il database da utilizzare (se è la prima volta che usate Azure ci sarà solamente l’opzione Create a new SQL database, altrimenti troverete l’elenco dei database SQL Azure che avete creato in passato).
  • La regione geografica del datacenter in cui sarà ospitato il servizio: per avere performance migliori, selezionate la regione più vicina a voi.

 

image_thumb2

Lo step successivo riguarda invece la creazione del database; ecco le informazioni richieste:

  • Il nome del database
  • Il server dove memorizzare il database (potete usare una delle istanze già esistenti oppure crearne uno nuovo tramite l’opzione New SQL Database server)
  • Username e password dell’utente che sarà utilizzato per accedere al database (ricordatevelo, perchè vi servirà per accedere al pannello di gestione).
  • La regione geografica del datacenter che ospiterà il database: per avere performance ottimali, scegliete la stessa regione in cui avete scelto di ospitare il servizio web.

 

image_thumb5

Ci siamo, il nostro servizio ora è operativo e funzionante! Se vi collegate all’URL che avete scelto nel primo step vedrete una pagina di benvenuto: si tratta dell’unica “vera” pagina che vedrete, dato che abbiamo creato un servizio, non un sito web. Come vedremo nei prossimo post, saremo in grado di fare operazioni sul database semplicemente tramite richieste HTTP standard.

Creiamo la nostra prima tabella

Per memorizzare i dati abbiamo bisogno di una tabella: per questo esempio approfitterò della mia passione per i fumetti, creeremo perciò una tabella per memorizzare semplici informazioni su un’ipotetia collezione, come titolo e autore.

La parte di creazione della tabella richiede qualche trucchetto: questo perchè l’interfaccia di gestione dei mobile services offre solamente le funzonalità per creare la tabella, senza dare l’opportunità di modificarla. La prima cosa da fare, perciò, è prprio creare la tabella: nella sezione Mobile services del portale portiamoci nella sezione Data e premiamo il pulsante Create. Ci verrà chiesto di dare un nome alla tabella e di impostare i permessi di accesso: manteniamo pure la configurazione predefinita, che consente l’accesso completo a qualunque applicazioni sia in possesso della chiave segreta di autenticazione.

image_thumb9

Ora è arrivato il momento di utilizzare il tool di Azure per la gestione dei database: nel momento in cui creiamo la tabella, infatti, viene aggiunta solamente una colonna Id, già configurata per essere la chiave primaria della tabella e il cui valore viene autogenerato ad ogni inserimento. Nel pannello di gestione di Azure cliccate sulla sezione SQL Databases: troverete nell’elenco il database che avete appena creato nel wizard precedente. Cliccate sul pulsante Manage posizionato in basso: se è la prima volta che vi collegate al database utilizzando la connessione corrente, il portale vi chiederà se volete aggiungere l’attuale indirizzo IP della vostra connessione tra quelli abilitati nelle regole del firewall: confermate premendo Yes, altrimenti non sarete in grado di collegarvi.

Una volta che avete confermato, vi verrà chiesto se volete passare immediatamente alla sezione di gestione del database: confermate nuovamente ed effettuate il login con le credenziali che avete scelto in fase di configurazione del database (se vi compare un errore relativo al firewall, aspettate un attimo e riprovate, a volta la regola richiede qualche minuto per diventare attiva).

A questo punto avete pieno accesso al database, un po’ come se foste collegati ad un database SQL locale tramite SQL Server Management Studio: cliccate sul database, entrate nella sezione chiamata Design (Progettazione in italianO) e selezionate Create new table. Se avete famigliarità con la gestione di database, dovrebbe essere semplice creare quello che vi serve, ovvero due colonne per memorizzare i nostri dati.

  • Un titolo, di tipo varchar e con nome Title.
  • L’autore, sempre di tipo varchar e con nome Author.

In realtà, esiste un’altra modalità per aggiungere nuove colonne: utilizzando i dynamic data. Quando questa feature è attiva (potete controllarne lo stato nella sezione Configure del vostro servizio, ma solitamente è abilitata come impostazione predefinita) sarete in grado di aggiungere nuovi campi direttamente da un’applicazione, semplicemente aggiungendo nuove proprietà alla classe che viene utilizzata per il mapping con la tabella (nell’esempio che useremo nei prossimi post, si tratta della classe Comic).

Per verificare che abbiamo fatto tutto correttamente possiamo provare ad eseguire alcune query direttamente tramite il browser: ricordiamoci infatti che si tratta di un servizio REST con il supporto al protocollo Odata. Per ottenere l’elenco dei dati memorizzati nella tabella dobbiamo semplicemente puntare il browser al seguente URL:

http://myapp.azure-mobile.net/tables/Comic

Se tutto è andato a buon fine, dovremmo ottenere la seguente risposta JSON:

{"code":401,"error":"Unauthorized"}

Anche se a prima vista potrà sembrarvi che ci sia qualcosa che non va, questo è esattamente il comportamento che ci aspettiamo: se ricordate la configurazione che abbiamo fatto in precedenza abbiamo specificato che solo chi è in possesso della chiave segreta è in grado di accedere ai dati della nostra tabella. Dato che semplicemente inserendo l’URL nel browser non abbiamo specificato il tipo di autenticazione, viene restituito l’errore 401, il quale però ci conferma che la tabella esiste. Se avessimo, infatti, cercato di richiamare tramite URL una tabella che non esiste avremmo ottenuto un JSON con un altro messaggio di errore:

{"code":404,"error":"Table 'Comic' does not exist."}

Ora che il nostro servizio è attivo e funzionante, siamo pronti per scrivere un po’ di codice: nei prossimi post vedremo come sviluppare un’applicazione Windows 8 e Windows Phone in grado di interagre con i dati memorizzati nella tabella Comic.


Windows Phone , Windows 8 , Azure

3 comments

Nokia Developer Champion

Print Content | More

clip_image002

Venerdì sera, come ciliegina sulla torta di una bellissima e intensa giornata trascorsa al campus Microsoft per l’evento dedicato al gaming su Windows 8, ho ricevuto una inaspettata ma graditissima mail: welcome to the Nokia Developer Champion program!

Il Nokia Developer Champion program è un’iniziativa di Nokia che prema gli sviluppatori maggiormente attivi nelle community, che offrono il loro supporto in molti modi: tramite il proprio blog, scrivendo articoli, tenendo sessioni agli eventi e così via. In parole povere, si può considerare analogo, come spirito e come filosofia, al programma MVP di Microsoft, di cui ho già l’onore di fare parte.

Recentemente Nokia ha aperto il suo programma anche agli sviluppatori Windows Phone, dato che è la tecnologia adottata per gli smartphone di ultima generazione prodotti dalla casa finlandese.

E’ un onore per me ricevere questo premio che, più che al sottoscritto, è dedicato alle community: tutto questo è possibile solo grazie al contributo delle persone che vi fanno parte e che mettono tanta passione in quello che fanno.

E adesso? Ora si continua, con sempre più carica e passione!


Windows Phone , Nokia

0 comments

Slide e demo del mio intervento sui sensori hardware di Windows 8

Print Content | More

Venerdì 5 Ottobre ho avuto l’occasione di partecipare ad un evento organizzato da Microsoft sul gaming su Windows 8. Ho trascorso veramente un bel pomeriggio: la qualità degli interventi (molto affascinante soprattutto quello di Joe Wilson dal tema “The power of technology”, supportato da una presentazione multimediale originale e diversa dalle solite slide in Powerpoint), l’organizzazione eccellente da parte di Microsoft e la compagnia di tanti amici che fa sempre piacere rivedere hanno reso la giornata veramente memorabile.

L’evento si è chiuso con un intervento a cura di Francesco Baldassarri (community manager di Intel) e del sottoscritto, dedicato all’utilizzo dell’hardware in Windows 8: Francesco ha introdotto l’argomento parlando di tablet e ultrabook di nuova generazione, nei quali la presenza di sensori di varia natura (da quelli di movimento, al GPS passando per NFC e sensori di luce) è sempre più forte. Dopodichè ho avuto il piacere di prendere la parola per continuare il discorso con un occhio di riguardo agli sviluppatori, spiegando come utilizzare i vari sensori all’interno di un’applicazione per il Windows Store: quali namespace, quali API, ecc.

Di seguito trovate le slide utilizzate durante l’intervento nonchè una soluzione Visual Studio con alcune semplici demo che ho utilizzato nel corso della sessione. Vi segnalo solo che la soluzione contiene anche una piccola demo di utilizzo delle funzionalità di geolocalizzazione, che non ho potuto mostrare per motivi di tempo.

Nel corso della prossima settimana, in più, Microsoft caricherà su Channel 9 la registrazione dell’evento: appena sarà disponibile aggiornerò il post con il link.

Aggiornamento: Microsoft ha pubblicato su Channel 9 la registrazione dell’evento, trovate il video in fondo al post mentre, a questo indirizzo, trovate l’elenco di tutte le sessioni (con la possibilità, inoltre, di scaricare in locale i video in alta definizione).

Per dubbi, domande o chiarimenti il form di contatto è a vostra disposizione!


Windows 8

0 comments

Windows 8 e Gaming, Azure Day e WebNet Conference: eventi per tutti!

Print Content | More

Con l’inizio dell’Autunno le iniziative delle community hanno ripreso vita e sono tanti gli appuntamenti importanti nel prossimo futuro. Vediamone qualcuno dei più interessanti!

Windows 8 e gaming

Sviluppare Giochi per Windows 8

Venerdì 5 Ottobre si terrà, in sede Microsoft a Peschiera Borromeo (MI), un evento dedicato al gaming e a Windows 8. L’evento avrà inizio alle ore 14 e vari speaker si alterneranno sul palco parlando delle opportunità di Windows 8 e delle tecnologie e dei linguaggi disponibili per lo sviluppo di giochi (da C# a C++ e DirectX, passando per framework alternativi come Unity o MonoGame).

All’evento ci sarà una buona rappresentanza di DotNetLombardia: il sottoscritto, insieme a Francesco Baldassarri, community manager di Intel, parlerà dei vari sensori hardware disponibili nei tablet e  gli ultrabook di nuova generazione (come i sensori di movimento, GPS o NFC) e come sfruttarli all’interno di un’applicazione Windows 8.

Dan Ardelean, invece, ci parlerà di come utilizzare MonoGame per portare facilmente giochi sviluppati con XNA per Windows Phone in Windows 8.

Per l’agenda completa e per registrarvi vi rimando alla pagina ufficiale dell’evento.

Azure Day 2012

Windows_azure_r.png

DotNetLombardia è particolarmente attiva nell’ultimo periodo e, a breve distanza dall’ultimo appuntamento (il Visual Studio Day in collaborazione con Intel), vi proponiamo un nuovo evento, completamente dedicato alla tecnologia cloud Microsoft per eccellenza, Azure.

La grande novità è che, per la prima volta per DotNetLombardia, l’evento sarà costituito da due track: una dedicata agli sviluppatori e una ai professionisti dell’IT. Nella prima si affronteranno tematiche e problematiche relative allo sviluppo di applicazioni in grado di integrarsi e di sfruttare con efficacia le potenzialità del cloud; nella seconda, invece, imparerete come integrare Azure all’interno delle infrastrutture aziendali già esistenti, quali sono i vantaggi e quali sono le problematiche da tenere presente.

L’evento si terrà il 10 Ottobre in sede Microsoft, a Peschiera Borromeo: vi lascio al sito ufficiale per l’agenda completa e le iscrizioni.

WebNet Conference

Il mio amico Ugo Lattanzi, insieme a Simone Chiaretta (entrambi MVP su ASP.NET) hanno organizzato una conferenza completamente dedicata a tematiche web che si terrà a Milano Sabato 20 Ottobre, presso la sede di Avanade Italia, situata a 5 minuti a piedi dalla stazione centrale. Se avete avuto occasione di parteciparvi in passato, la location è la stessa degli ultimi eventi targati UgiAlt.Net.

Ugo e Simone sono riusciti nella difficile impresa di organizzare una conferenza di stampo europeo: le sessioni saranno perciò in inglese e diversi speaker e partecipanti arriveranno appositamente dall’estero per l’occasione. L’agenda è ricca di argomenti interessanti: Azure, Web API, Javascript, SignalR e tanti altri ancora.

Purtroppo (per voi che state leggendo questo post, non per chi l’ha organizzata ovviamente Smile) la conferenza ha catalizzato molto interesse e nel giro di poco meno di 3 ore i posti disponibili sono andati esauriti: se vi interessa paretcipare potete provare a registrarvi per la wait list, nel caso in cui si liberi qualche posto.

Trovate tutte le informazioni sul sito ufficiale.


Windows 8 , Azure , Web

0 comments

Utilizzare e testare i background task di Windows 8 – Parte 2

Print Content | More

Nel post precedente abbiamo creato e configurato un background task per la nostra applicazione Windows 8: abbiamo creato un progetto a parte per il task e abbiamo configurato il file di manifest. Ora è tempo di scrivere il codice necessario per registrare il task, così che l’applicazione possa utilizzarlo. Andremo a registrare il task che abbiamo creato nel post precedente: un semplice timer task che mostra una notifica toast.

Ecco il codice da inserire nel file MainPage.xaml.cs, ovvero il code behind della pagina che viene caricata quando l’applicazione viene lanciata.

private async void RegisterBackgroundTask()
{
    try
    {
        BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
        if (status == BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity || status == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity)
        {
            bool isRegistered = BackgroundTaskRegistration.AllTasks.Any(x => x.Value.Name == "Notification task");
            if (!isRegistered)
            {
                BackgroundTaskBuilder builder = new BackgroundTaskBuilder
                {
                    Name = "Notification task",
                    TaskEntryPoint =
                        "BackgroundTask.NotificationTask.NotificationTask"
                };
                builder.SetTrigger(new TimeTrigger(60, false));
                builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
                BackgroundTaskRegistration task = builder.Register();
            }
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine("The access has already been granted");
    }
}

La prima cosa da fare è chiedere all’utente il permesso di eseguire il task in background, chiamando il metodo RequestAccessAsync della classe BackgroundExecutionManager. Quando questo metodo viene eseguito, all’utente viene mostrata una finestra in cui gli viene richiesto il permesso di abilitare o meno il task: la scelta dell’utente viene restuita sotto forma di oggetto di tipo BackgroundAccessStatus, che è un enumeratore. Il codice appena descritto è contenuto all’interno di un blocco try / catch: questo perchè c’è un bug nelle API di WinRT che fa si che venga scatenata un’eccezione nel caso l’utente abbia già dato il suo consenso di eseguire il task in background.

Nel caso l’utente abbia dato il suo benestare, la prima cosa che facciamo è verificare se il task sia già registrato o meno. Al contrario di quanto avviene con Windows Phone, infatti, è possibile registrare più volte lo stesso task; nel mondo Windows Phone, invece, viene sollevata un’eccezione. Per raggiungere questo scopo dobbiamo accedere alla collezione di tutti i task registrati (BackgroundTaskRegistration.AllTasks) e cerchiamo un task dal nome Notification task: vedremo a breve che questo è il nome con cui identificheremo il task.

Se il task non è ancora registrato, creiamo una nuova istanza della classe BackgroundTaskBuilder e impostiamo due proprietà: Name, che è l’identificativo del task (è il nome che abbiamo usato in precedenza per controllare se era già registrato o meno) e TaskEntryPoint, che è lo stesso valore che abbiamo impostato nel parametro Entry point del file di manifest: è il nome completo della classe che ospita il task, compreso di namespace. Nel nostro esempio, l’entry point è BackgroundTask.NotificationTask.NotificationTask.

Il passo successivo è definire il tipo di background task: pre questo scopo utilizziamo il metodo SetTrigger dell’oggetto di tipo BackgroundTaskBuilder. Dato che nell’esempio abbiamo creato un timer task, definiamo un TimeTrigger e specifichiamo che deve essere eseguito ogni 60 minuti. Un’altra caratterisca dei background task di Windows 8 è il supporto alle conditons, ovvero condizioni che devono essere soddisfatte affinchè il task venga eseguito. Nel nostro caso, siccome andiamo a simulare un task che periodicamente controlla su Internet la presenza di nuove notizie, aggiungiamo una SytemCondition di tipo InternetAvailable. In questo modo il task sarà eseguito solo se c’è una connessione Internet attiva; in caso contrario, il task non sarà nemmeno eseguito.

Infine registriamo i ltask chiamando il metodo Register. Come ultima operazione, prima di iniziare i test, dobbiamo ricordarci di agiungere una reference del progetto del task al client: è sufficiente fare tasto destro sul progetto dell’applicazione, scegliere Add reference e, tramite la sezione Solutions, fare doppio clic sul progetto del background tas.

In the end we register the task by calling the Register method. Last but not the least, we need to add a reference of the background task’s project to the client: let’s right click on the client project, choose Add reference and, by using the Solutions tab, double click on the background’s task project.

It’s time to debug!

Ora che abbiamo creato un background task vogliamo testarlo per verificare che tutto funzioni correttamente: Visual Studio 2012, fortuntamente, offre un modo più intelligente che semplicemente farci attendere che le condizioni di esecuzione siano soddisfatte (nel nostro caso, la presenza di una connessione ad Internet e il raggiungimento del timer di 60 minuti).

La prima cosa da fare è registrare il task quando l’applicazione viene avviata: in questo esempio chiamiamo semplicemente il metodo RegisteredBackgroundTask che abbiamo appena definito nel costruttore della classe MainPage.

La prima volta che l’applicazione viene eseguita sarà mostrato il messaggio che vi chiede l’autorizzazione ad eseguire il task in background: una volta che avete confermato e l’applicazione è partita, tornate in Visual Studio. Fate clic con il tasto destro in uno degli spazi vuoti sotto il menu e abilitate la visualizzazione della toolbar Debug location. Accanto al nome del processo troverete un menu a tendina, con alcune utili opzioni che permettono di simulare i vari stati che può assumere durante il suo ciclo di via un’applicazione Windows 8 (Suspend, Resume o Suspend and shutdown): nel nostro caso, siccome abbiamo registrato un background task, troverete un’altra opzione con il nome del task.

image_thumb2

Cliccateci sopra e… voilà, il background task sarà eseguito: se avete impostato un breakpoint sul metodo Run del vostro task, avrete la possibilità di fare debuggging come fareste con qualsiasi altra applicazione.

E se qualcosa va storto? Ad esempio, il task non viene mostrato nell’elenco dei processi?

Ecco alcuni suggerimenti di problemi che possono causare malfunzionamenti nel vostro task:

  • Assicuratevi che il tipo del progetto contenente il background task sia Windows Runtime Component.
  • L’applicazione deve avere una reference al progetto del task: assicuratevi che sia elencato nella sezione References del vostro progetto.
  • Controllate le impostazioni dell’applicazione (tramite la charm bar) e verificate che sia le notifiche che i background task siano abilitati.
  • Verificate che l’entry point (sia nel manifest che nella registrazione nel codice) sia corretto. Deve essere il nome della classe comprensivo di namespace.

Se voltete fare esperimenti con quanto visto in questi post, ecco il link da cui scaricare il progetto di esempio utilizzato.


Windows 8 , Microsoft , Background task

0 comments

Utilizzare e testare i background task di Windows 8 – Parte 1

Print Content | More

Dopo diversi tentativi sono finalmente riuscito a capire qual è il modo corretto per utilizzare, configurare e testare i background task di Windows 8: dato che l’intera procedura potrebbe risultare poco intuitiva, ho pensato di condividere con voi la mia esperienza.

Prima di tutto faccio però un passo indietro: esattamente come in Windows Phone, anche le applicazioni Windows 8 non possono essere eseguite in background, in quanto vengono automaticamente sospese dal sistema operativo 10 secondi dopo che l’app non è più in primo piano (perchè ne abbiamo aperta un’altra, oppure siamo passati al desktop). Per non limitare eccessivamente gli sviluppatori, Windows 8 ha introdotto il concetto di background task, ovvero operazioni che possono essere eseguite in background quando viene soddisfatta una determinata condizione: è trascorso un intervallo di tempo, è arrivata una notifica push, lo stato del computer è cambiato, ecc.

Questo concetto dovrebbe essere famigliare agli sviluppatori Windows Phone: la versione 7.5 del sistema operativo mobile di Microsoft ha introdotto, infatti, lo stesso approccio per supportare l’esecuzione di operazioni in background. L’unica differenza è che i task di Windows 8 sono più potenti: in Windows Phone ci sono poche categorie di background task e, principalmente, sono quasi tutti basati su criteri di esecuzione temporali (pensiamo ai PeriodicTask). In Windows 8, invece, c’è una maggiore varietà di condizioni che possono essere monitorate per determinare l’esecuzione di un task in background.

Di contro, i task in Windows 8 sono più complessi da implementare e testare, principalmente perchè, al contrario del mondo Windows Phone, non esiste un template specifico in Visual Studio, perciò non è così immediato capirne il funzionamento.

La prima cosa da tenere a mente è che, esattamente come in Windows Phone, i background task sono un progetto separato di Visual Studio, che fa parte della stessa soluzione dell’applicazione vera e propria. Il primo passo, perciò, è quello di creare un nuovo progetto, facendo clic con il tasto destro sulla soluzione e scegliendo Add – New Project. Il template che andremo ad usare si chiama Windows Runtime Component, disponibile all’interno della categoria Windows Store.

SNAGHTMLbc5089b_thumb2

E’ importante usare questo template perchè in questo il tipo di output del progetto viene automaticamente impostato su Windows Runtime Component (questa informazione è visibile nel dropdown menu chiamato Output Type all’interno delle proprietà del progetto). Se provate ad utilizzare un altro tipo di progetto (come una generica Class Library), il background task non funzionerà.

image_thumb3

Ora che abbiamo il progetto possiamo iniziare a scrivere un po’ di codice: rinominate la classe che viene creata in automatico con il progetto, in modo da dargli un nome più significativo (ad esempio, NotificationTask nel mio caso) e cambiate la definizione in modo che la classe erediti dall’interfaccia IBackgroundTask.

Tale interfaccia vi “obbligherà” ad implementare il metodo Run, che è quello che viene invocato nel momento in cui il background task viene eseguito: conterrà tutta la logica necessaria per eseguire le operazioni in background. In questo esempio, creerò un semplice background task che mostra a video una notifica toast. Ecco il codice del metodo che invia la notifica, utilizzando uno dei template messi a disposizione da WinRT:

private void SendNotification(string text)
{
    XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);

    XmlNodeList elements = toastXml.GetElementsByTagName("text");
    foreach (IXmlNode node in elements)
    {
        node.InnerText = text;
    }

    ToastNotification notification = new ToastNotification(toastXml);
    ToastNotificationManager.CreateToastNotifier().Show(notification);
}

Utilizzando la classe ToastNotificationManager recuperiamo l’XML che identifica il template e ne modifichiamo il nodo text, che contiene il testo della notifica. Infine, creiamo una nuova ToastNotification utilizzando il template che abbiamo appena aggiornato e lo mostriamo usando nuovamente la classe ToastNotificationManager.

All’interno del metodo Run del bacgkround task andiamo semplicemente a richiamare il metodo appena definito passando un testo fittizio:

public void Run(IBackgroundTaskInstance taskInstance)
{
    SendNotification("This is a toast notification");
}

Una cosa importante da sottolineare è che il metodo Run porta con se un parametro di tipo IBackgroundTaskInstance, che contiene diverse informazioni sull’esecuzione corrente. Questo parametro è importante specialmente se dobbiamo scrivere del codice asincrono che faccia uso delle keyword async e await, in quanto, con l’architettura che abbiamo visto, il task terminerebbe prima che il codice asincrono abbia completato la sua esecuzione.

Per questo motivo, l’oggetto di tipo IBackgroundTaskInstance contiene il metodo GetDeferral che restituisce un oggetto di tipo BackgroundTaskDeferral, da utilizzare per gestire il codice asincrono:

public async void Run(IBackgroundTaskInstance taskInstance)
{
    BackgroundTaskDeferral deferral = taskInstance.GetDeferral();

    //we launch an async operation using the async / await pattern    
    await CheckNewItems();

    deferral.Complete();
}

Una volta in possesso di tale oggetto possiamo eseguire il nostro codice asincrono (nell’esempio, chiamiamo un metodo fittizio che controlla la presenza di nuove notizie da un feed) e, solo una volta che l’operazione è terminata, chiamiamo il metodo Complete.

Passiamo all’applicazione

Fino ad ora ci siamo concentrati su come creare il background task. Ma come facciamo a configurare il client (l’applicazione Windows 8 vera e propria) per utilizzare il task? Sono due gli step da seguire: il primo è dichiarare il task nel manifest. Fate doppio click sul file Package.appxmanifest, in modo da aprire l’editor visuale, e portatevi nella sezione Declarations: dal dropdown selezione Background Tasks e premete il pulsante Add. A questo punto occorre configurare:

  • Il tipo di background task: nel nostro esempio andiamo a definire un task di tipo timer, che può essere eseguito periodicamente.
  • L’entry point del background task, ovvero il nome della classe completo di namespace. Siccome nel nostro esempio abbiamo definito una classe NotificationTask all’interno di un progetto chiamato BackgroundTask.NotificationTask, l’entry point sarà BackgroundTask.NotificationTask.NotificationTask.

image_thumb7

Non abbiamo ancora finito di modificare il file di manifest: come potete vedere nell’immagine, una volta che abbiamo aggiunto la dichiarazione del background task è comparsa un’icona di avvertimento (la croce bianca su sfondo rosso) nel tab Application UI. Questo perchè, quando si include un task di tipo Timer, Push Notification o Control Channel, Visual Studio vi obbliga a specificare il comportamento da adottare per le lock notifications, ovvero le notifiche che vengono mostrare sulla lock screen. Tale requisito è richiesto perchè si tratta di tipologie di background task che vengono solitamente utilizzati per questo scopo.

Per farlo, dobbiamo aprire il tab Application UI e:

  • Impostare alla voce Lock screen notifications se avete intenzione di mostrare come notifica solo un badge (l’icona con un numero) o se è supportata anche la visualizzazione di testo (come fa, ad esempio, l’applicazione del calendario, che mostra il titolo del prossimo appuntamento).
  • Impostare, nella sezione Notifications, l’opzione Toast capable su yes, siccome il background task che abbiamo creato è in grado di mostrare notifiche toast.

image_thumb2

E’ tempo di scrivere un po’ di codice… o quasi

Nel prossimo post vedremo come registrare il background task nel codice e quali sono gli strumenti che ci mette a disposizione Visual Studio 2012 per testarlo.


Windows 8 , Microsoft , Background task

1 comments

Windows Phone 8: piccole e grandi novità da Nokia

Print Content | More

Windows Phone 8 continua a svelarsi con il contagocce e l’evento di ieri di Nokia non ha fatto eccezione: la press conference organizzata dalla casa finlandese, infatti, si è concentrata quasi totalmente sui nuovi modelli della serie Lumia dedicati a Windows Phone 8, lasciando qualche minuto a Joe Belfiore di Microsoft per mostrare qualche caratteristica di Windows Phone 8, senza però svelare troppe novità.

Dal punto di vista del software, infatti, Microsoft ha sottolineato alcune delle feature già conosciute (come la nuova start screen) e ne ha mostrato qualcuna di nuova (come la possibilità di scattare screenshot o la nuova versione dell’applicazione per interagire con la fotocamera). Rimangono perciò non confermate le feature consumer che sono trapelate in qualche modo negli ultimi mesi.

Massima segretezza anche per la nuova versione dell’SDK: chi si aspettava qualche novità nella giornata di oggi sarà rimasto deluso, visto che Microsoft non ha rilasciato alcunchè nè ha svelato la data di uscita ufficiale. C’è però una notizia interessante: tramite un post sul blog ufficiale Microsoft fa sapere che l’SDK è già nelle mani di alcuni sviluppatori selezionati e aziende partner, allo scopo di preparare applicazioni di alto livello per il lancio ufficiale. A partire dal 12 Settembre, Microsoft estenderà la disponibilità della preview dell’SDK ad altri sviluppatori tra coloro che hanno già pubblicato applicazioni per Windows Phone 7. Aspettate però prima di esultare: a quanto pare il numero di persone selezionate sarà molto ristretto. Appuntamento per il 12 Settembre sul blog ufficiale del team di Windows Phone, nel quale saranno pubblicate maggiori informazioni sulla procedura per entrare a far parte del programma di beta testing.

Lumia 920 e Lumia 820

Se Microsoft può avere lasciato un po’ l’amaro in bocca a chi si aspettava qualche annuncio in più, Nokia non ha invece tradito le aspettative, presentando due nuovi telefoni Windows Phone 8 della serie Lumia.

Il primo è il Lumia 920 e va a prendere il posto del Lumia 900 come telefono top di gamma, adeguandosi alle nuove specifiche hardware di Windows Phone 8: risoluzione più alta (1280x768), processore dual core, NFC e 1 GB di memoria RAM. A questa dotazione hardware di primo piano si affianca una fotocamera di altissima qualità, dotata della nuova tecnologia PureView di Nokia, uno schermo generoso (4.5 pollici), uno storage capiente (32 GB) e qualche chicca decisamente interessante, come il supporto alla ricarica wireless (tramite un’apposita base fornita con il telefono) e uno schermo touch screen di nuova generazione molto sensibile, che può essere utilizzato anche indossando dei guanti (molto comodo in inverno Smile).

Trovate l’elenco completo delle caratteristiche in questo articolo pubblicato su Plaffo.

Ecco il video ufficiale di Nokia:

Il Lumia 820 invece è il fratello minore, con caratteristiche inferiori al 920 ma comunque molto interessanti: dotato anch’esso di supporto alla ricarica wireless e disponibile in diversi colori grazie alla presenza di cover intercambiabili, è dotato come il fratello maggiore di un processore dual core da 1.5 GHz, ma ha uno schermo di dimensioni inferiori (4.3 pollici) e con la stessa risoluzione dei Lumia della precedente generazione (800x480). Di minore qualità anche la fotocamera, dotata comunque di 8 MPixel ma senza la tecnologia PureView che contraddistingue il fratello maggiore. Ridotta anche la capacità di storage (8 GB), compensata però da una delle novità di Windows Phone 8: il supporto alle microSD per memorizzare musica, foto e film.

Anche in questo caso, vi segnalo l’articolo di Plaffo con l’elenco completo delle caratteristiche tecniche e vi propongo il filmato ufficiale del prodotto.

Nessuna comunicazione per il momento per quanto riguarda il prezzo e la data di lancio, anche se si sa che avverrà entro la fine dell’anno, periodo per il quale è atteso il rilascio di Windows Phone 8. Il divertimento deve ancora iniziare! Smile


Windows Phone , Microsoft , Nokia

0 comments

Il mio primo articolo cartaceo… con qualche rettifica!

Print Content | More

Nel numero di Settembre della rivista PC Professionale trovate il mio primo articolo pubblicato sulla carta stampata, dedicato allo sviluppo di applicazioni per Windows Phone. In più, nel DVD trovate anche un webcast della durata di circa 30 minuti che vi guiderà passo passo nella creazione di un semplice progetto, ovvero un’applicazione per leggere un feed RSS.

Mi sembra doveroso però, in questa sede, specificare alcune rettifiche, dovute ad alcune scelte editoriali non di mia competenza.

La prima è relativa al titolo dell’articolo riportato nell’indice, ovvero Windows Phone si allinea a Windows 7: tale titolo è palesemente sbagliato, dato che non vuol dire niente Smile Come ben sapete, Windows Phone 7 è basato su un subset di Silverlight, che è una delle tante tecnologie disponibili nel mondo Microsoft.

La seconda rettifica è relativa al sottotitolo che è stato pubblicato nell’articolo vero e proprio, ovvero: Windows Phone 8 allinea il sistema operativo mobile di Microsoft con Windows 8 dal punto di vista del core e dell’approccio allo sviluppo. Come potete immaginare, si tratta di un’informazione decisamente errata: l’SDK di Windows Phone 8 non è ancora stata rilasciata, perciò sarebbe stato impossibile per me scrivere un articolo dedicato allo sviluppo di applicazioni per la nuova piattaforma, viste le poche informazioni rivelate da Microsoft all’evento del 20 Giugno scorso. L’articolo è, ovviamente, incentrato su Windows Phone 7.5.

Vi segnalo infine che l’articolo riporta foto e informazioni inerenti il vecchio App Hub: purtroppo questo non è un errore mio o dell’editore, ma è una conseguenza del fatto che spesso il mondo tecnologico è più veloce dei tempi editoriali delle riviste cartacee; il nuovo Windows Phone Dev Center, infatti, è stato reso pubblico ad articolo già consegnato.

Fatte queste doverose precisazioni, vi auguro una buona lettura dell’articolo e, se avete dubbi o domande, non esitate a contattarmi tramite l’apposito form!

Aggiornamento: mi sono accorto ora che anche la copertina del DVD inclusi alla rivista è sbagliato. All’interno, infatti, troverete un webcast introduttivo allo sviluppo per Windows Phone 7.5 e non, come riportato, su Windows Phone 8.


Windows Phone

0 comments

Un evento online dedicato a Windows Phone il 7 Settembre

Print Content | More

Se siete sviluppatori Windows Phone vi segnalo un interessante appuntamento organizzato da Microsoft per il 7 Settembre: a partire dalle ore 15 alcuni esperti saranno disponibili online per rispondere alle vostre domande, dubbi e difficoltà nello sviluppo di applicazioni per la piattaforma mobile Microsoft.

L’evento si svolgerà tramite l’utilizzo di Lync, la tecnologia Microsoft per i meeting e le conferenze online: alla pagina ufficiale trovate il link per la registrazione e per scaricare Lync Attendee (la versione gratuita di Lync che permette di partecipare ai meeting ma non di crearli).

Nei giorni precedenti all’evento riceverete le istruzioni per collegarvi e per prepararvi adeguatamente. Ovviamente, è altamente consigliato avere già installati sul vostro computer i tool di sviluppo per Windows Phone 7.5, che potete scaricare da qui.

Vi aspettiamo numerosi!


Windows Phone , Microsoft

0 comments

MVVM e Windows Phone – Gestire gli eventi tramite Command (6° parte)

Print Content | More

Nel post precedente abbiamo visto come utilizzare i command, ovvero il meccanismo che ci permette di gestire le interazioni dell’utente con la UI direttamente nel ViewModel, rispettando i principi del pattern MVVM ed evitando così di andare ad inserire logica nel code behind.

I command però si “limitano” a soddisfare lo scenario di interazione principale offerto dal controllo (ad esempio, il tap di un pulsante): se in questo modo andiamo a coprire la maggior parte dei casi d’uso reali, può capitare però la necessità di interagire con uno degli altri eventi esposti dal controllo.

Sempre rimanendo nell’ambito del controllo Button un esempio è dato dall’evento DoubleTap, che permette di gestire la doppia pressione del pulsante da parte dell’utente. Per soddisfare questo scenario ci vengono in aiuto i behavior di Silverlight e, nello specifico, uno di quelli inclusi nel MVVM Light Toolkit, chiamato EventToCommand. Questo behavior è in grado di fare il mapping tra un evento e un command, dandoci la possibilità di usare il binding.

Vediamo come utilizzarlo: come prima cosa definiamo nel ViewModel il nostro command, esattamente come abbiamo fatto nel post precedente.

private RelayCommand _buttonDoubleTap;

public RelayCommand ButtonDoubleTap
{
    get
    {
        return _buttonDoubleTap
            ?? (_buttonDoubleTap = new RelayCommand(
                                  () =>
                                      {
                                          MessageBox.Show("Double tapped!");
                                      }));
    }
}

Si tratta di un command molto semplice, che si limite a mostrare un messaggio a video. Ora vediamo invece come collegarlo all’evento DoubleTap di un pulsante nello XAML: la prima cosa è dichiarare due namespace che ci serviranno, il primo per accedere ai behavior e il secondo per accedere a quello specifico del toolkit.

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP71"

Se abbiamo aggiunto MVVM Light tramite NuGet troveremo automaticamente referenziate queste due librerie.

Dopodichè possiamo utilizzare il behavior EventToCommand come nell’esempio:

<Button Content="Double tap">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="DoubleTap">
            <Command:EventToCommand Command="{Binding Path=ButtonDoubleTap}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

La sintassi è molto semplice: nella proprietà EventName del controllo EventTrigger si specifica l’evento del controllo che si vuole gestire, mentre nella proprietà Command del behavior EventToCommand si indica, tramite binding, il command da eseguire dichiarato nel ViewModel. E’ possibile anche utilizzare i command con parametri (come abbiamo visto nel post precedente) semplicemente utilizzando la proprietà CommandParameter.

In conclusione

Di seguito trovate il link per scaricare il progetto di esempio sui command aggiornato con una demo della funzionalità vista in questo post.


Windows Phone , MVVM

2 comments