Phonegap app su iTunes Store. Si può fare!

Su moltissimi forum di Phonegap si leggono messaggi di persone disperate perchè iTunes Store non accetta le loro app realizzate con HTML5 e Phonegap.

Proporre una app ad Apple per vedersela esporre sull’iTunes Store non è affare da poco: prima di tutto devi avere un Mac, dopo di che devi passare indenne tutta la procedura di verifica delle varie licenze di sviluppatore, devi inserire l’ID di qua, l’ID di la…a prima vista, una giungla burocratica pazzesca.

Una volta che, invece, si è presa la mano sulle operazioni da compiere, risulta piuttosto veloce ed indolore avere un pacchetto valido da proporre ad Apple. Altro discorso è quello di riuscire a proporre una applicazione ad Apple che risponda ai canoni indicati dall’azienda di Cupertino nella loro guideline.

L’errore più frequente (e per più frequente parliamo del 95% delle volte) che viene compiuto dai programmatori o presunti tali di app è quella di proporre una versione “app” di un normalissimo sito internet. Apple, giustamente, rifiuta l’applicazione indicando che il progetto non è abbastanza…”app”. Non sfrutta in nessuna maniera le peculiarità dello smartphone o del tablet, non da alcun plusvalore all’utente rispetto alla navigazione con safari del sito stesso. Quindi…se volete accingervi a creare la vostra app, fermatevi e ragionate un secondo su quale potrebbe essere una funzionalità in più per la vostra applicazione.

La mia prima app realizzata con Phonegap è la versione mobile del sito Ilportaledelpoker.com, portale dedicato al mondo del texas e sue varianti. Poker, roba da malati. Un po’ come la programmazione, via…

Alla fine, è niente altro che l’archivio delle news inserite sul sito, con però una aggiunta fondamentale: la possibilità di aggiungere, su un database creato on-the-fly sul telefono, gli articoli a preferiti, potendoli poi sfogliare in un secondo tempo.
Attenzione: gli articoli non vengono salvati interamente sul telefono, ma solamente “indicizzati” attraverso il loro ID univoco. Entrando nella sezione preferiti, la app prima carica dal database l’array con gli ID degli articoli, dopo di che ne carica titolo e testo da remoto, direttamente dal database centrale del sito.

Utilizzo, in sostanza, l’oggetto Storage datomi da Phonegap.
Il codice per gestire lo Storage è semplicissimo:

function populateDB(tx) {
     tx.executeSql('DROP TABLE IF EXISTS DEMO');
     tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)');
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")');
     tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")');
}

function errorCB(err) {
    alert("Error processing SQL: "+err.code);
}

function successCB() {
    alert("success!");
}

var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000);
db.transaction(populateDB, errorCB, successCB);

Dichiaro una variabile db, che esegue un comando, ossia window.openDatabase( nome del database, versione del db, nome “visibile” del db e la sua dimensione ); subito dopo eseguo una azione chiamata transaction, che consiste in 3 azioni distinte: azione, errore, successo.
Devo fare delle operazioni sul database? Le carico nella funzione populateDB, ossia quella che, nell’esempio:

  • elimina il database se esiste già
  • ricrea la tabella
  • inserisce una riga con id=1
  • inserisce una riga con id=2

Semplicissimo!
Il sistema poi, a seconda che la funzione populateDB sia andata a buon fine o a vacca totale, richiamerà errorDB e successDB. A voi l’incredibile difficoltà di capire quale verrà lanciata in caso di errore.

Questo piccolo excursus per farvi capire che basta utilizzare un oggettino ed avere un minimo di fantasia per vedere le proprie app accettate da Apple. Certo, se la vostra app è un cesso, non funziona bene a prescindere dalle sue funzionalità oppure gliela proponete dicendogli subito che è una demo o una beta, beh…allora avete proprio tanto tempo da perdere!