Eu pensei que isso não seria tão difícil de descobrir, mas aparentemente não é fácil encontrar um artigo incrível para vários dispositivos, como você esperava.
Desejo criar um link que abra o navegador do dispositivo móvel e navegue no google maps OU abra um aplicativo de mapas (Apple Maps ou Google Maps) e inicie diretamente uma rota, ou seja: comece na localização atual, termine em um determinado ponto ( lat / long).
Posso testar em dois dispositivos (ao lado da pilha de navegadores), um Android e um iPhone.
O seguinte link funciona apenas no Android:
<a href="http://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
Clicar neste link no Chrome do iPhone, estranhamente abre o Google Maps na versão para desktop com anúncios no aplicativo móvel ...
Este só funciona no iOS, abrindo Apple Maps pedindo-me para inserir um local de início (posso escolher "Local Atual") e iniciar a rota = comportamento desejado. Clicar neste link falha completamente no Android:
<a href="maps://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
Observe o protocolo maps: //.
Existe uma maneira elegante de dispositivo cruzado de criar tal link? Um link que funciona em todos os principais celulares?
obrigado
ATUALIZAÇÃO: solução encontrada (meio)
Aqui está o que eu descobri. Não é bem o que eu imaginei, embora esteja funcionando.
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)
o maps://
protocolo é o esquema de url para o aplicativo apple maps, que só começará a funcionar no ios 6 ou superior. Existem maneiras de testar se o gmaps está instalado e, em seguida, escolher o que fazer com a url, mas isso foi demais para o que eu pretendia. Então, acabei criando um link maps: // OR maps.google.com/, usando os parâmetros acima.
** ATUALIZAÇÃO **
infelizmente, $ .browser.device não funciona desde jquery 1.9 (fonte - http://api.jquery.com/jquery.browser )