Sistema di push notification per Windows Phone e Windows 8 rivendibile a terzi
Facciamola breve: mi sono stancato di dover – per ciascun app Windows Phone o Windows 8 che necessiti di push notification – di dover implementare bene o male le stesse cose. Ovvero, in breve:
- una tabella “Subscribers” sul database SQL Server che mantenga i subscriber per quella specifica app
- implementare sul servizio WCF specifico dell’app i metodi Subscribe/Unsubscribe invocati internamente all’app per permettere all’utente di attivare/disattivare le notifiche
Dal punto di vista server, ogni mia app (Duello in Cucina, Deputati Italiani, la futura Diretta Volley, Piloti Virtuali Italiani, etc.) ha bene o male una certa parte di sistema ripetuta, cosa che cominciava a non andarmi del tutto a genio. Inoltre può sembrare poca roba, ma vi assicuro che non è così. Ed anche se fosse poca roba, è comunque una cosa da ripetere e scrivere ogni volta, con rischio ovviamente di codice ripetuto, a rischio di bug, etc. etc. Quindi, mi sono detto, sarebbe fattibile creare un’unica infrastruttura database & WCF talmente generica da poter essere sfruttata in ogni mia futura app, indipendentemente dal fatto che sia Windows Phone o Windows 8, per gestire le push notification? E magari talmente generica da poter essere addirittura “venduta/affittata” a terzi? La risposta è ovviamente sì.
Cosa vi metto quindi a disposizione?
E’ semplice: un servizio WCF che espone i seguenti metodi:
I metodi sono autoesplicativi:
- va chiamato il metodo Subscribe quando da una qualsiasi delle vostre app wp7/win8 volete aggiungere un nuovo subscriber
- va chiamato il metodo Unsubscribe quando da una qualsiasi delle vostre app wp7/win8 volete rimuovere un nuovo subscriber
Il metodo Push invece deve essere invocato dal vostro servizio web/cloud: questo è il vero motore che invia le notifiche a tutti i subscriber relativi alla vostra app.
Chiaramente le chiamate ai metodi WCF descritti qui sopra utilizzano una serie di classi (SubscribeRequest, UnsubscribeRequest e PushRequest) che incapsulano un po’ di informazioni, grazie alle quali vi autenticate, mi dite che siete (inteso come “cliente”), mi dite quale app siete, etc. etc. Nel momento in cui volete inviare le notifiche, stessa cosa: mi dite chi siete, quale app siete, il tipo di notifica (toast, tile, badge, etc.), l’xml della push notification che volete inviare, etc. etc.
Io mi occupo di memorizzare sui miei server i vostri utenti e di inviare a tutti la notifica.
Limitazioni
Chiaramente, per ora metto a disposizione questa cosa solo ad amici e colleghi developer.
Ci sono alcune limitazioni note di cui vi voglio parlare.
- Poca sicurezza, nel senso che ad oggi mi dovete comunicare (solo per le app Windows 8) la SecretKey ed il Sid relativo a ciascuna app che volete gestire
- Non c’è la possibilità di fare push notification “selettive”: cioè, se la vostra app ha 1000 subscribers attivi, in questo momento la chiamata al metodo Push invia a tutti la notifica, mentre in realtà potrebbe non essere così (immaginate un’app di calcio, ed immaginate che l’utente voglia ricevere una notifica solo quando segna la squadra per cui tifa – questo scenario non è ancora coperto – ma ci sto lavorando su)
Se volete aiutarmi, se volete provarlo, se avete qualche suggerimento/segnalazione da darmi, sono tutt’orecchi!