2012-06-30 12 views
6

Ho quello che penso sia un set abbastanza standard di una web-app esistente e vorrei ricevere consigli su come adattarlo al meglio per creare versioni native tramite PhoneGap, in un modo che possiamo continuare a sviluppare l'app web e ad aggiornare le versioni generate da esso con una rilavorazione minima.problemi di percorso porting web-app su PhoneGap

Sono un principiante PhoneGap. Ho cercato in giro e provato vari suggerimenti da StackOverflow ecc senza fortuna, almeno per il mio set-up.

L'applicazione è sviluppata in GWT e si compone di:

risorse statiche in una cartella condivisa per tutte le app

/static/con le immagini, i caratteri, css. Il CSS definire alcuni caratteri-famiglie, fa riferimento a file di font in/font

Ci riferiamo a queste risorse statiche da file HTML e codice JavaScript utilizzando percorsi assoluti.

risorse statiche in un numero di sottocartelle (dai moduli GWT FYI)

Come/LoginGadget, che dovranno GWT generati HTML, JavaScript e talvolta sottocartelle con css e css-immagini.

GWT-RPC

Questi sono servlet fondamentalmente dove GWT si prende cura di serializzazione, ecc, e vi si accede dal nostro codice client tramite XHR sotto le coperte

PhoneGap Costruire

ho iniziato a guardare creare un'applicazione compressa usando PhoneGap e incappare in alcuni problemi in cui ho bisogno di consigli (esempio Android).

Ho creato/assets/www e ho inserito un file index.html e l'ho avviato. ho copiato una versione del nostro/cartella/static e la nostra cartella/LoginGadget sotto quel "root" per vedere, e ha iniziato utilizzando

super.loadUrl("file:///android_asset/www/index.html"); 

che funziona.

In tutti i nostri file HTML e Javascript generati da GWT abbiamo riferimenti a risorse statiche che utilizzano sia percorsi assoluti (ad esempio "/ static/....") che relativi (ad esempio da un LoginGadget Javascript, potrebbe fare riferimento a "css/some.css ").

I percorsi relativi funzionano, poiché risiedono "sotto" la cartella in cui si trovano gli html/j che li fanno riferimento.

Problema 1

Tuttavia, i riferimenti a percorsi assoluti non riescono, nonostante PhoneGap partire dicendo:

DroidGap: url=file:///android_asset/www/index.html baseUrl=file:///android_asset/www/ 

mi aspettavo un riferimento a "/static/images/file.png" dal dicono indice. html da aggiungere alla "baseUrl" per dare file: ///android_asset/www/static/images/file.png e quindi lavorare, poiché è lì che si trova il file.

Ho dovuto modificare index.html per utilizzare "static/image/file.png" perché funzionasse. Ma dovrei ricompilare tutte le nostre app GWT con una configurazione diversa per modificare tutti i riferimenti alle risorse, ei riferimenti da altri file nelle sottocartelle in "/ static /" non funzioneranno se modificati per essere solo "statici" /".

Come posso ottenere riferimenti di percorso assoluti a "mappa" su/assets/www o simile? (Vedi sotto, ho guardato utilizzando il tag "base" ....)

Problema 2

Le RPC GWT fanno la richiesta XHR al server il codice html/js è stato servito da. Funziona perfettamente in quanto l'app non ha il nome del server host hard-coded, ed è infatti distribuita su molti appidini/domini appendentesi per test ecc.

Qui i file html/js sono "serviti" da file: /// quindi ho bisogno di specificare il server in qualche modo.

Ho provato a specificare con il tag "base" come documentato, ma qualsiasi riferimento che ho nel mio html/js a una risorsa che non specifica "file: //" sembra essere fatto al server specificato in "base" ..... quindi non sto caricando più le mie risorse locali e fondamentalmente ho un'app web servita dal mio server.

Vuoi

Quello che mi piacerebbe fare, è quello di essere in grado di prendere la (abbastanza grande) compilato e testati app dalla guerra di mio WAB-app (/ statica e tutte le mie cartelle/GWT-Module) intatto e copiarli in/assets/www sulla mia app PhoneGap e quindi aggiungere qualche piastra di caldaia o codice di avvio ed eseguire come è.

suona come una grande richiesta, ma penso che se potessi specificare correttamente due cose: Percorso

  • file da utilizzare come "root" per i percorsi assoluti per le richieste di risorse che non specificano un http/il protocollo HTTPS (o altri protocolli ..... che ho già visto sono gestiti in DroidGap.java)

  • del server (protocollo, hostname, porto) a utilizzare per qualsiasi XHR richieste

Allora tutto sarebbe uscito nel lavaggio!

Ho pensato che si sarebbe trattato di un "standard" fallito e già coperto. Forse lo è e mi manca qualcosa.

Commenti? suggerimenti?

Grazie in anticipo per qualsiasi aiuto.

+0

attenzione con i caratteri della dogana. Non tutti i browser lo supportano bene. Per esempio. WP7 no. – Loda

+0

Faccio spesso questo tipo di sviluppo. Non sono sicuro del motivo per cui utilizzeresti mai percorsi assoluti. Usa percorsi relativi solo come il punto di PhoneGap è quello di costruire per più dispositivi. –

risposta

0

abbiamo risolto questi problemi con due azioni distinte:

1) Ho scritto un obiettivo di formica che, come parte della nostra build, prende l'app web e sostituisce i percorsi in tutti i riferimenti di URL interni che trova, adattandoli a ciò che è necessario per farli funzionare all'interno dell'app. Mi sembra ancora un grosso problema in PhoneGap. Forse è stato corretto nelle versioni più recenti?

2) Abbiamo suddiviso la classe di servizio RPC e l'abbiamo modificata per avere un membro statico che è l'endpoint del servizio. All'avvio della nostra app phonegap modifichiamo il punto finale per puntare al server desiderato e presto .... tutti i nostri RPC GWT puntano al posto giusto.

3

Sai di mgwt? http://www.m-gwt.com

È una struttura mobile per GWT creata da uno dei membri del comitato direttivo GWT e ha anche l'integrazione di PhoneGap per le app GWT.

C'è un sacco di documenti nei progetti e un gruppo di utenti molto amichevole.

Permettetemi di affrontare i vostri problemi con un po 'più in dettaglio:

Problem1:

Se si utilizza percorso assoluto si otterrà che il comportamento in contrasto con PhoneGap, dal momento che il browser costruisce tali URL a livello locale e un riferimento a/indica la voce radice sul telefono. Utilizzare URL assoluti è una cattiva idea il più delle volte e ti consiglierei di cambiarlo nella tua app (come hai già fatto).

Problem2:

Per utilizzare GWT RPC con PhoneGap leggere questo post sul blog che ho fatto per affrontare i problemi: http://blog.daniel-kurka.de/2012/04/gwt-rpc-with-phonegap-revisited.html

+0

Ho dato un'occhiata a mgwt/gwt-phonegap. Se riesco a far funzionare le cose su phonegap, potremmo spostare più del nostro sviluppo di app Web con GWT per usarle. Tuttavia, il loro output JS compilato sarà simile, penso al mio output JS compilato con GWT esistente ..... e quindi penso che avrò ancora gli stessi problemi che descrivo nella mia domanda? –

+0

Ciao Daniel, grazie per quello. Avevo già iniziato a utilizzare SetServiceEndPoint ..... ma ho saltato il lavoro di creare un nuovo generatore per GWT.create(), ma mi sono avvicinato in modo simile. Ho modificato la mia build per rimappare gli URL assoluti per i percorsi e funziona per Android, ma per iOS il percorso assoluto non può essere determinato in fase di compilazione in quanto ha un ID dispositivo nel mezzo del percorso! :-( –

Problemi correlati