Recibí una solicitud inalámbrica hace dos días. Como novato, he estado ocupado durante varios días... Hay un enlace en la página si el usuario ha instalado la APLICACIÓN, haga clic para abrir la APLICACIÓN correspondiente. No lo instalé, haga clic para abrir la aplicación correspondiente. Configurar la conexión. Busqué en línea y básicamente dije que se puede lograr, pero la situación real no es optimista.
Por supuesto, es sólo uno de los requisitos. Hoy en día también hay varias aplicaciones. Las páginas H5 compartidas suelen tener un botón para abrirse inmediatamente. Si la aplicación está instalada localmente, se llamará directamente. no está instalado, luego salta para descargar. Esta es una estrategia muy normal para la promoción y el desvío del tráfico. Recientemente, el gerente de producto presentó tal demanda, creando una barra de descarga con la aplicación abierta como la función Toutiao, etc., ¡y no hablaré del resto!
Ahora vayamos al tema principal de hoy: ¿cómo abre o activa H5 una aplicación local en un teléfono móvil? Mirando las respuestas en Baidu y Google, solo hay dos tipos:
Primera forma:Al configurar directamente el esquema en el lado de Android en href en la etiqueta a del HTML, por supuesto, si hay otras configuraciones de host, simplemente sígalas. La configuración y el código del lado de Android son los siguientes:
Configuración del lado de Android:
<actividad android:nombre = .MainActivity> <filtro de intención> <acción android:nombre = android.intent.action.MAIN /> <categoría android:nombre = android.intent.category.LAUNCHER /> </intent-filter> <filtro de intención> <acción android:nombre=android.intent.action.VIEW/> <categoría android:name=android.intent.category.DEFAULT/> <categoría android:name=android.intent.category.BROWSABLE/> <data android:host=jingewenku.com android:scheme=abraham/> </intent-filter> </actividad>
Nota: Si esto está configurado en la página de inicio, debe colocarse al lado de la etiqueta; de lo contrario, no habrá ningún ícono de la aplicación móvil después de ejecutarse. Tenga en cuenta que el protocolo del esquema debe estar en minúsculas; de lo contrario, habrá una excepción; ¡Eso no puede responder!
código html:
<html> <head> <meta http-equiv=Content-Type content=text/html; charset=UTF-8> <title>Inserte título aquí</title> </head> <body> <a href=abraham: //jingewenku.com/?pid=1>Abrir aplicación</a><br/> </body></html>
Aquí echamos un vistazo al formato del protocolo de empalme de esquema:
< a href=[esquema]://[host]/[ruta]?[consulta]>Iniciar aplicación</a>
El significado de cada elemento es el siguiente:
esquema: identificar la aplicación iniciada. ※Detalles descritos más adelante
anfitrión: descripción apropiada
ruta: clave necesaria al pasar el valor ※Está bien si no está disponible
consulta: Obtenga la clave y el valor del valor ※Está bien si no lo tiene
Lo anterior se puede usar para abrir la aplicación local, por supuesto, cuando la aplicación existe; de lo contrario, no habrá respuesta.
Quizás se pregunte: ¿el protocolo de esquema configurado en Android no está configurado en el código HTML anterior? Obviamente no configuré el pid, ¿por qué debería escribir esto? Esto se debe a que a veces cuando invocamos la aplicación local, podemos pasar algunos parámetros a la aplicación. Podemos configurar estos parámetros aquí. Solo necesitamos obtenerlos en oncreate.
Intención intención = getIntent(); Uri uri = intent.getData(); if (uri! = nulo) { String pid = uri.getQueryParameter(pid);Si aún desea configurar el protocolo de esquema en Android, también puede hacer esto:
Uri uri = getIntent().getData();if(uri != null) { // Información completa de la URL String url = uri.toString(); Log.e(TAG, url: + uri); esquema = uri.getScheme(); Log.e(TAG, esquema: + esquema); // parte del host String host = uri.getHost(); host); //parte del puerto int port = uri.getPort(); Log.e(TAG, host: + puerto //Ruta de acceso String path = uri.getPath(); ruta); List<String> pathSegments = uri.getPathSegments(); // Parte de la consulta String query = uri.getQuery(); //Obtener el valor del parámetro especificado String mercancíasId = uri.getQueryParameter(goodsId);}Cómo determinar si un esquema es válido:
PackageManager packageManager = getPackageManager();Intent intención = newIntent(Intent.ACTION_VIEW, Uri.parse(abraham://jingewenku.com:8888/goodsDetail?goodsId=10011002));List<ResolveInfo> actividades = packageManager.queryIntentActivities(intent, 0);booleanisValido = !actividades.isEmpty();if(isValid) { startActivity(intención);}Este método también es el más popular en Baidu, pero trae un problema. El requisito anterior es tener una conexión en la página. Si el usuario instala la APLICACIÓN, haga clic para abrir la APLICACIÓN correspondiente. instalado, haga clic para abrir la conexión de configuración correspondiente. Esto obviamente no cumple con los requisitos y solo se puede usar para algunas necesidades individuales.
Segunda forma:Dado que no es posible configurar el protocolo de esquema en href, solo se puede lograr a través del código js. Solo de esta manera se puede abrir la aplicación según el juicio cuando esté disponible y saltar al enlace de descarga para descargarla cuando no.
Sabemos que js no puede determinar si una determinada aplicación está instalada en el teléfono, por lo que solo podemos guardar el país a través de curvas. Si no se puede acceder a la aplicación durante mucho tiempo, se utilizará de forma predeterminada. no se está instalando y luego vaya a la página de descarga. Por supuesto, esto no es lo que se me ocurrió, es lo que piensan los grandes de Internet. Aquí tenemos que subdividirlo en dos situaciones.
1. Despierta directamente
Nota: Puede cambiar la aplicación a través de h5. Por ejemplo, visite una URL, haga clic en el botón y abra la aplicación. Si la aplicación no está instalada, vaya directamente a la página de descarga de la aplicación de la App Store. mejor haciendo clic. Si está instalada Con la aplicación, se puede activar en los principales navegadores móviles (navegador 360, navegador uc, navegador Sogou, navegador QQ, navegador Baidu) y cliente QQ. WeChat, el cliente Sina Weibo y el cliente Tencent Weibo no se pueden activar.
El código es el siguiente:
<html xmlns=http://www.w3.org/1999/xhtml><head><meta http-equiv=Content-Type content=text/html;charset=utf-8><head><script src=http://libs.baidu.com/jquery/1.9.0/jquery.js></script><title>Haga clic para activar la demostración</title></head><body><style>#zjmobliestart {font -size:40px;}</style><!--Descripción: puede cambiar la aplicación a través de h5. Por ejemplo, acceda a una URL, haga clic en el botón y abra la aplicación si la aplicación no está instalada. saltar directamente a la aplicación. Página de descarga de la APP de la tienda, haciendo clic. La compatibilidad es buena si la aplicación está instalada, se puede activar en todos los principales navegadores móviles (navegador 360, navegador uc, navegador Sogou, navegador QQ, navegador Baidu) y cliente QQ. WeChat, el cliente Sina Weibo y el cliente Tencent Weibo no se pueden activar. --><a href=zjmobile://platformapi/startapp id=zjmobliestart target=_blank>¡Despierta Zhejiang Mobile Mobile Business Hall! </a><script type=text/javascript> function applink(){ return function(){ var clickedAt = +new Date; setTimeout(function(){ !window.document.webkitHidden && setTimeout(function(){ if ( +nueva fecha: se hizo clic en < 2000){ ventana.ubicación = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com'; } }, 500 }, 500) } } documento; .getElementById(zjmobliestart).onclick = applink(); </script></body></html>2. Haga clic para despertar
Nota: Puede activar la aplicación a través de h5. Si visita una URL, puede abrir directamente la aplicación. Si la aplicación no está instalada, vaya directamente a la página de descarga de la aplicación de la App Store. Compatibilidad general: se puede activar en los principales navegadores de teléfonos móviles (navegador 360, navegador uc, navegador Sogou, navegador QQ y navegador Baidu). WeChat, el cliente QQ, el cliente Sina Weibo y el cliente Tencent Weibo no se pueden activar.
El código es el siguiente:
<!Doctype html><html xmlns=http://www.w3.org/1999/xhtml><head><meta http-equiv=Content-Type content=text/html;charset=utf-8><head> <guión src=http://libs.baidu.com/jquery/1.9.0/jquery.js></script><title>Activar la demostración directamente</title></head><body><style>#zjmobliestart{ font -size:40px;}</style><!--Descripción: Puede activar la aplicación a través de h5. Si visita una URL, puede abrir la aplicación directamente si la aplicación no está instalada y luego saltar directamente. a la aplicación. La página de descarga de la APLICACIÓN de la Tienda tiene compatibilidad general: se puede activar en todos los principales navegadores móviles (navegador 360, navegador uc, navegador Sogou, navegador QQ, navegador Baidu). El cliente WeChat QQ, el cliente Sina Weibo y el cliente Tencent Weibo no se pueden activar. --><p id=zjmobliestart>¡Despierta Zhejiang Mobile Mobile Business Hall! </p><script type=text/javascript> function applink(){ window.location = 'zjmobile://platformapi/startapp'; var clickedAt = +new Date; setTimeout(function(){ !window.document.webkitHidden && setTimeout(function(){ if (+nueva fecha - clic en <2000){ ventana.ubicación = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com'; ;</script> </body></html>De esta manera, nuestras necesidades se completaron. Durante este proceso, también encontramos muchas explicaciones de personas entusiastas. Las registraré aquí. Al principio, algunas personas no entendieron mis necesidades y pensaron que lo estaba implementando en el lado de Android. Me pidieron que pasara el nombre del paquete. Para verificar si la aplicación está instalada, registre el método aquí, el código es el siguiente:
Para obtener más métodos, consulte mi clase de herramienta: CommonUtilLibrary
Otros piensan que quiero invocar la aplicación local cargando la vista web en la aplicación. También la registraré aquí.
webView.setWebViewClient(new WebViewClient(){ @Override public boolean deberíaOverrideUrlLoading(vista WebView, URL de cadena) { Uri uri=Uri.parse(url); if(uri.getScheme().equals(abraham)&&uri.getHost(). es igual(jingewenku.com)){ String arg0=uri.getQueryParameter(arg0); arg1=uri.getQueryParameter(arg1); }else{ view.loadUrl(url } devuelve verdadero }});También debe tenerse en cuenta que si se invoca la aplicación local en WeChat, el WeChat del teléfono móvil utiliza el navegador integrado de WeChat (puede enviar la dirección de la página obtenida previamente en el servidor a cualquiera de sus contactos, haga clic en Enviar mensaje para abrir la página web) Abra esa página HTML simple. Nota: No es posible abrir directamente el esquema://host/datastring. WeChat no analizará esta cadena de caracteres en una URL. página para navegar con WeChat. El dispositivo está encendido. Después de ingresar, verá la página que acabamos de diseñar. En este momento, hacer clic para iniciar la aplicación directamente no activará la APLICACIÓN previamente instalada. Debido a que WeChat la ha bloqueado, debe elegir abrirla en el navegador desde el menú en la esquina superior derecha. En este momento, algunos navegadores pueden reactivarse, pero otros no. Por ejemplo, si el navegador integrado en la máquina de prueba MX4 del autor no funciona, UC Browser puede reactivarse. Algunos navegadores no se pueden activar. He consultado mucha información y no puedo resolverlo por completo. Lo único que se me ocurre ahora es dejar que el front-end juzgue el navegador que encuentra el problema. no es compatible y qué navegador se debe utilizar. Si algún lector tiene una solución, deje un mensaje, ¡gracias!
posdata:
¿Por qué no puedo activar la aplicación en WeChat y necesito abrirla con un navegador?
Debido a que WeChat ha implementado el blindaje de esquemas en todas las conexiones compartidas, es decir, WeChat ha bloqueado todas las llamadas al esquema en las conexiones compartidas.
Entonces, ¿por qué se pueden invocar algunas aplicaciones, como Dianping y Didi Taxi?
Desde una perspectiva no técnica, gracias a Dianping y Didi Taxi, son ahijados e hijos biológicos de WeChat. Tiene un cuidado especial por su hijo.
Desde una perspectiva técnica, WeChat tiene una lista blanca y las llamadas de esquemas no se bloquearán para conexiones compartidas en la lista blanca.
¿No entiendes? Pongamos un ejemplo.
Por ejemplo, el enlace para compartir de Dianping es http://dazhongdianping.share.1.com
En correspondencia con la lista blanca de WeChat, habrá un elemento http://dazhongdianping. Todo intercambio proveniente de esta conexión no bloqueará el esquema.
Por ejemplo http://dazhongdianping.share.2.com
http://dazhongdianping.share.3.com
Incluso una subsidiaria de Dianping puede usar http://zigongsi.dazhongdianping.share.3.com. El nombre de dominio raíz también está en la lista blanca, por lo que puede usarse.
En este punto, todos deben comprender que es imposible evitar este problema tomando prestado el esquema de Dianping a menos que su enlace para compartir pueda vincularse al nombre de dominio raíz de Dianping.
Esta pregunta debe explicarse claramente. Otra cosa a mencionar es que cuando se trata de descargar apk, WeChat bloquea cualquier aplicación y los hijos no son una excepción, así que si deseas proporcionar un enlace de descarga, no importa si eres hijo o no. , no puedes escapar usando un navegador para abrirlo.
Apéndice: Esquemas de URL para aplicaciones comunes
1. Aplicación predeterminada del sistema
| nombre | Esquema de URL | Identificador de paquete |
|---|---|---|
| Safari | http:// | |
| mapas | http://maps.google.com | |
| Teléfono | teléfono:// | |
| SMS | SMS:// | |
| Correo | correo a:// | |
| iBooks | libros:// | |
| Tienda de aplicaciones | itms-apps://itunes.apple.com | |
| Música | música:// | |
| Vídeos | vídeos:// |
2. Software de terceros de uso común
| nombre | Esquema de URL | Identificador de paquete |
|---|---|---|
| mqq:// | ||
| weixin:// | ||
| Tencent Weibo | TencentWeibo:// | |
| taobao | taobao:// | |
| alipay | alipay:// | |
| sinaweibo:// | ||
| weico Weibo | weico:// | |
| Navegador QQ | navegador mqq:// | com.tencent.mttlite |
| navegador uc | delfín:// | com.dolphin.browser.iphone.chino |
| Abrir navegador | ohttp:// | com.oupeng.mini |
| Navegador Sogou | SogouMSE:// | com.sogou.SogouExplorerMóvil |
| mapa de Baidu | mapa baidu:// | com.baidu.map |
| Cromo | google chrome: // | |
| youku | youku:// | |
| jingdong | openapp.jdmoble: // | |
| todos | renren:// | |
| meituán | imeituan:// | |
| Tienda número 1 | wccbyihaodian:// | |
| lo comprobaré | wcc:// | |
| Diccionario Youdao | yddictproapp:// | |
| Zhihu | zhihu:// | |
| Revisar | dianping:// | |
| microdisco | sinavdisk: // | |
| Doubanfm | doubanradio: // | |
| Clase abierta de NetEase | ntesopen:// | |
| El rey de las tarjetas de visita en todos los aspectos | tarjeta de cámara:// | |
| Música QQ | qqmusic:// | |
| Vídeo de Tencent | diezvideo:// | |
| Películas de Douban | película douban: // | |
| Música en la nube NetEase | Orfeo:// | |
| Noticias NetEase | aplicación de noticias:// | |
| Aplicación NetEase | aparecer:// | |
| Lotería NetEase | ntescaipiao:// | |
| Notas de la nube de Youdao | tu nota: // | |
| Ver más | lector duokan:// | |
| Índice Nacional de Calidad del Aire | suciobeijing:// | |
| Música Baidu | baidumusic:// | |
| ir a la cocina | xcfapp:// |
Lo anterior es el contenido completo de este artículo. Espero que sea útil para el estudio de todos. También espero que todos apoyen VeVb Wulin Network.