Instant Developer

Tips&Tricks Instant Developer Foundation: estendere la Shell Nativa

| 10 Giugno 2014 | Giuseppe Lanzi
8 Instant Developer

Abbiamo parlato tante volte dei vantaggi dell’architettura ibrida delle app fatte con Instant Developer, che essendo scritte in javascript possono essere utilizzate su tutti i grandi sistemi operativi mobile – iOS, Android e Windows8/RT – e a cui la Shell Nativa mette a disposizione funzionalità altrimenti inaccessibili, come la lettura del file system o l’accesso al rullino fotografico. Ma come fare quando si deve estendere la Shell con funzionalità non previste da InDe? So che ci sono molte persone interessate all’argomento e così ho deciso di usare il post di oggi per rispondere a questa domanda. Faccio un esempio partendo da un progetto Android, ma le classi da personalizzare sono le stesse anche negli altri casi.

Se create il pacchetto di installazione di un’app offline troverete la classe IDWebView.java: è un oggetto che estende la classe base WebView del sistema operativo e che funzionando come un normale browser mostra all’utente l’interfaccia web dell’app. Magari non proprio come un normale browser, perché permette l’avvio dell’applicazione in assenza di connettività caricandola direttamente da file system. Ma a parte l’avvio offline c’è un altro comportamento di cui oggi ci interessa parlare.

Avete presente l’URL che usate per richiamare un’applicazione web online facendo scattare l’onCommand? Ecco, in modo analogo IDWebView gestisce tutte le richieste HTTP la cui query string contiene il parametro _CMD, scatenando il metodo handleCommand di Service.java. Quest’ultima funzione utilizza la reflection per cercare una procedura che abbia il nome uguale al valore del parametro, se la trova la lancia. Se a questo punto sapessimo come effettuare questo tipo di richieste saremmo a posto. Partiamo dal vedere come fa il framework.

Ogni volta che utilizziamo una funzione della libreria Shell viene lanciato il metodo SendCmd di Shell.js. È questa la funzione che crea l’URL giusto, effettua la richiesta HTTP e ne legge la risposta, facendo da ponte tra il javascript e il codice nativo.

In questo progetto di esempio ho aggiunto al codice nativo una funzione HELLO come quella nell’immagine sopra, che riceve un parametro con il nome dell’utente e ritorna una saluto in formato stringa. Poi ho fatto in modo che fosse richiamabile dall’app:

  • ho aggiunto la funzione alla classe Service.java, copiando la mia versione personalizzata nella cartella custom dentro Devices\Android\src\com\__InstMob__;
  • ho aggiunto la sendCmd alla libreria Shell, creando una metodo con due argomenti: una stringa contenente il nome della funzione nativa da lanciare e un IDMap con tutti i parametri da passare al codice nativo.

Per provare l’esempio bisogna compilare l’app creando i pacchetti di installazione, importare il progetto dentro Eclipse e poi compilarlo sul dispositivo. Una volta fatto aprite la videata Commands Test e troverete due righe: HELLO vi permette di provare il mio esempio mentre MYFUNCT aspetta solo che voi la implementiate 🙂

Giuseppe Lanzi
Technical Support Manager
Mi occupo di assistenza e consulenza tecnica, dei corsi di formazione e dei sistemi rivolti ai clienti. Amo la tecnologia e ogni tipo di nuovo gadget, mi interesso di fotografia e prendo al volo ogni occasione di scoprire un nuovo gioco.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


Potrebbe interessarti

Instant Developer Foundation e Cloud 24.5: la prima volta insieme

Il rilascio delle versioni 24.5 di Instant Developer Foundation e Instant Developer Cloud rappresenta una grande novità: è la prima occasione in cui le due...

Leggi Tutto

Integrazione di librerie JavaScript per generare barcode

Scegliere il modo giusto per generare barcode non è semplice e la decisione che prendi può fare la differenza in termini di costi e praticità.Potresti...

Leggi Tutto

Web API: il modo semplice per condividere database con Instant Developer Foundation

Utilizzare le Web API per condividere i propri database con altre applicazioni può essere a volte molto complicato. Ma, allo stesso tempo, le Web API...

Leggi Tutto

Rimani Aggiornato

Iscriviti alla nostra newsletter per ricevere aggiornamenti su novità, eventi, release, webinar e tante altre notizie sui prodotti Instant Developer.

    Presa visione dell'informativa (disponibile qui) resa da Pro Gamma SpA, acconsento al trattamento dei miei dati personali per l'invio di newsletter.*