Posts Tagged ‘cordova’

Prima app per android pubblicata

Friday, November 30th, 2012

Normalmente nella mia vita lavorativa quando si discute di applicazioni mobili multipiattaforma, in un modo o nel altro parlo sempre della mia esperienza con PhoneGap (ora Cordova); la mia prima app sull’appStore di Apple (A.I.S.Mo Info)  è stata appunto  sviluppata con questo framework ed era più che altro un esperimento, quasi un Proof Of Concept.

L’app in se stessa è molto semplice,: un insieme di pagine HTML che sfruttano poco le caratteristiche di PhoneGap e con qualche hack per le mappe. La User Interface è molto iOS-like grazie all’utilizzo del framework CSS UIUIKit.

Ci sono stati esperimenti di porting “automatico” usando il servizio PhoneGap build (ora Adobe PhoneGap Build).

Cogliendo l’occasione di un corso di sviluppo Android, ho effettuato il porting dell’applicazione.

Tempo totale: meno di una giornata compreso il tempo di pubblicazione sul PlayStore.

La fase vera di porting e test è stata molto veloce, ho dovuto testare la visualizzazione su diversi dispositivi a mia disposizione,  creare le icone (ho usate le stesse dell’iphone ridimensionate da eclipse) e gli screen shot per il play store.

In due ore e mezzo, mi sono registrato come sviluppatore, ho cercato di capire cosa fosse necessario per pubblicare l’app (testi e screenshot). La creazione del pacchetto di rilascio è molto più semplice, non c’e’ da impazzire con provisioning profiles, certificati e loro relativa importazione (e conflitti);ho quindi firmato il pacchetto creando il Keystore e atteso che l’app fosse disponibile su GooglePlay.

Sicuramente la pubblicazione su PlayStore è molto più “easy” che non su appStore, i tempi di attesa sono molto diversi in quanto il market di android è molto più “libero” e con meno controlli rispetto ad Apple, ma se si volesse pubblicare la propria app anche su altri market Android i tempi di pubblicazione non sarebbero molto diversi da quelli a cui è abituato uno sviluppatore iOS.

 

 

Phonegap Cordova: richiamare l’app mappe nativa in IOS6

Sunday, October 21st, 2012

In un precendente post spiegavo un work-around per richiamare l’app Mappe di google nativa su iOS da una applicazione sviluppata con phonegap: lanciando opportunamente un URL che puntasse al server maps.google.com, si apriva l’app mappe integrata. Il lancio “dell’opportuno URL” consiste in una semplice riga di codice:

[[UIApplication sharedApplication] openURL:url];

Nell’ultima versione del sistema degli iDevice l’applicazione l’app di google è stata sostituita e il comportamento degli URL è cambiato di conseguenza. In IOS6 un url a maps.google.com aprirà il sito di google in Safari. Sarà quindi necessario intercettare tutte le chiamate di apertura URL della webView e sostituire l’url corretto per la versione di  IOS. Gli URL alle mappe nella mia applicazione puntano a maps.apple.com. Il metodo è shouldStartLoadWithRequest che si trova in MainViewController.m (la posizione è cambiata rispetto a phonegap  1.0)

[sourcecode language=”objc”]
– (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType) navigationType {
NSLog(@"link:%@",[[request URL] absoluteString]);
if ([[[request URL] absoluteString] rangeOfString:@"http://maps.apple.com"].location != NSNotFound) {
// Open in native Maps App
if ([[UIDevice currentDevice].systemVersion floatValue] NSLog(@"MAPPE GOOGLE");
NSURL *url=[NSURL URLWithString:[[[request URL] absoluteString] stringByReplacingOccurrencesOfString:@"http://maps.apple.com" withString:@"http://maps.google.com" ]];
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"MAPPE APPLE");
[[UIApplication sharedApplication] openURL:[request URL]];
}
return NO;
}
else
return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ];
}
[/sourcecode]

[iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=1449319548″ width=”121px” height=”240px” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″][/iframe] [iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=B008EK6HVY” width=”121px” height=”240px” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″][/iframe] [iframe src=”http://rcm-it.amazon.it/e/cm?lt1=_blank&bc1=000000&IS2=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=ac20blo-21&o=29&p=8&l=as4&m=amazon&f=ifr&ref=ss_til&asins=1430239034″ width=”121px” height=”240px” scrolling=”no” marginwidth=”0″ marginheight=”0″ frameborder=”0″][/iframe]