Pensavo piuttosto che non sarebbe stato così difficile da scoprire, ma apparentemente non è facile trovare un fantastico articolo cross-device, come ti aspetteresti.
Voglio creare un collegamento che apra il browser del dispositivo mobile e navighi su Google Maps OPPURE apra un'app di mappe (Apple Maps o Google Maps) e inizi direttamente un percorso, ovvero: inizia dalla posizione corrente, termina in un determinato punto ( lat / long).
Posso testare su due dispositivi (oltre a browserstack), un Android e un iPhone.
Il seguente collegamento funziona solo su Android:
<a href="http://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
Facendo clic su questo collegamento nel Chrome di iPhone, si apre stranamente Google Maps nella versione desktop con annunci sull'app mobile ...
Questo funziona solo su iOS, aprendo Apple Maps chiedendomi di inserire una posizione di partenza (posso scegliere "Posizione corrente") e avviare il percorso = comportamento desiderato. Fare clic su questo collegamento non riesce completamente su Android:
<a href="maps://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
Notare il protocollo maps: //.
Esiste un modo elegante cross-device per creare un tale collegamento? Un collegamento che funziona su tutti i principali cellulari?
Grazie
AGGIORNAMENTO: Soluzione trovata (più o meno)
Ecco cosa ho trovato. Non è proprio quello che immaginavo, anche se funziona.
var ua = navigator.userAgent.toLowerCase(),
plat = navigator.platform,
protocol = '',
a,
href;
$.browser.device = ua.match(/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera/i) ? ua.match(/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera/i)[0] : false;
if ($.browser.device) {
switch($.browser.device) {
case 'iphone':
case 'ipad':
case 'ipod':
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later: <http://bit. ly/TJjs1V>
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
}
var ver = iOSversion() || [0];
if (ver[0] >= 6) {
protocol = 'maps://';
}
else {
protocol = 'http://maps.google.com/maps';
}
break;
case 'android':
default:
protocol = 'http://maps.google.com/maps';
break;
}
a.attr('href', protocol + href)
il maps://
protocollo è lo schema URL per l'app apple maps, che inizierà a funzionare solo su ios 6 o versioni successive. Esistono modi per verificare se gmaps è installato e quindi scegliere cosa fare con l'URL, ma era un po 'troppo per quello che intendevo. Quindi ho appena finito per creare un link maps: // OR maps.google.com/, utilizzando i parametri sopra.
** AGGIORNARE **
purtroppo, $ .browser.device non funziona da jquery 1.9 (fonte: http://api.jquery.com/jquery.browser )