J'ai reçu une demande sans fil il y a deux jours. En tant que novice, je suis occupé depuis plusieurs jours... Il y a un lien sur la page Si l'utilisateur a installé l'APP, cliquez pour ouvrir l'APP correspondante. Je ne l'ai pas installé, cliquez pour ouvrir l'application correspondante. J'ai cherché en ligne et j'ai dit en gros que cela pouvait être réalisé, mais la situation réelle n'est pas optimiste.
Bien sûr, ce n'est qu'une des exigences. Il existe également diverses applications de nos jours. Les pages H5 partagées ont généralement un bouton pour s'ouvrir immédiatement. Si l'application est installée localement, l'application locale sera directement appelée. pas installé, puis passez au téléchargement. C'est une stratégie tout à fait normale de promotion et de détournement de trafic Récemment, le chef de produit a mis en avant une telle demande, en faisant une barre de téléchargement avec l'application ouverte comme la fonction Toutiao, etc., et je ne parlerai pas du reste !
Passons maintenant au sujet principal d'aujourd'hui, comment H5 ouvre ou active-t-il une application locale sur un téléphone mobile. En regardant les réponses sur Baidu et Google, il n'en existe que deux types :
Première façon :En configurant directement le schéma côté Android dans le href dans la balise a du HTML, bien sûr, s'il existe d'autres configurations d'hôte, suivez-les simplement. La configuration et le code côté Android sont les suivants :
configuration côté android :
<activité android:name = .MainActivity> <intent-filter> <action android:name = android.intent.action.MAIN /> <category android:name = android.intent.category.LAUNCHER /> </intent-filter> <intent-filter> <action android:name=android.intent.action.VIEW/> <catégorie android:name=android.intent.category.DEFAULT/> <category android:name=android.intent.category.BROWSABLE/> <data android:host=jingewenku.com android:scheme=abraham/> </intent-filter> </activité>
Remarque : Si cela est configuré sur la page de démarrage, il doit être placé à côté de l'étiquette, sinon il n'y aura pas d'icône de l'application mobile après l'exécution ; notez que le protocole du schéma doit être en minuscule, sinon il y aura une exception. ça ne peut pas répondre !
code html :
<html> <head> <meta http-equiv=Content-Type content=text/html; charset=UTF-8> <title>Insérer le titre ici</title> </head> <body> <a href=abraham : //jingewenku.com/?pid=1>Ouvrir l'application</a><br/> </body></html>
Nous examinons ici le format du protocole d'épissage de schéma :
< a href=[scheme]://[host]/[path]?[query]>Démarrer l'application</a>
La signification de chaque élément est la suivante :
schéma : identifiez l'application démarrée. ※Détails décrits plus tard
hôte : description appropriée
chemin : clé nécessaire lors du passage de la valeur ※ Ce n'est pas grave si elle n'est pas disponible
requête : Obtenez la clé et la valeur de la valeur ※ Ce n'est pas grave si vous ne l'avez pas
Ce qui précède peut être utilisé pour ouvrir l'application locale, bien sûr, lorsque l'application existe, sinon il n'y aura pas de réponse.
Vous vous demandez peut-être si le protocole de schéma configuré dans Android n'est pas configuré dans le code HTML ci-dessus ? Je n'ai évidemment pas configuré le pid, pourquoi devrais-je écrire ceci ? En effet, parfois, lorsque nous invoquons l'application locale, nous pouvons transmettre certains paramètres à l'application. Nous pouvons configurer ces paramètres ici. Il nous suffit de les obtenir dans oncreate.
Intention intent = getIntent(); Uri uri = intent.getData(); if (uri != null) { String pid = uri.getQueryParameter(pid });
Si vous souhaitez toujours configurer le protocole de schéma dans Android, vous pouvez également procéder ainsi :
Uri uri = getIntent().getData();if(uri != null) { // Informations complètes sur l'url String url = uri.toString(); schéma = uri.getScheme(); Log.e(TAG, schéma : + schéma); // partie hôte String host = uri.getHost(); host); //port part int port = uri.getPort(); Log.e(TAG, host: + port); //Chemin d'accès String path = uri.getPath(); path); List<String> pathSegments = uri.getPathSegments(); // Partie de requête String query = uri.getQuery(); //Obtenir la valeur du paramètre spécifié String goodId = uri.getQueryParameter(goodsId);}
Comment déterminer si un schéma est valide :
PackageManager packageManager = getPackageManager (); Intent intent = newIntent (Intent.ACTION_VIEW, Uri.parse (abraham://jingewenku.com:8888/goodsDetail?goodsId = 10011002)); 0);booleanisValide = !activities.isEmpty();if(isValid) { startActivity(intent);}
Cette méthode est également la plus populaire sur Baidu, mais elle pose un problème. L'exigence ci-dessus est d'avoir une connexion sur la page. Si l'utilisateur installe l'application, cliquez pour ouvrir l'application correspondante si ce n'est pas le cas. installé, cliquez pour ouvrir la connexion de paramètre correspondante. Cela ne répond évidemment pas aux exigences et ne peut être utilisé que pour certains besoins individuels.
Deuxième manière :Étant donné que la configuration du protocole de schéma dans href n'est pas possible, elle ne peut être réalisée que via le code js. Ce n'est qu'ainsi que l'application peut être ouverte en fonction du jugement lorsqu'elle est disponible et accéder au lien de téléchargement pour la télécharger lorsqu'elle n'est pas disponible.
Nous savons que js ne peut pas déterminer si une certaine application est installée sur le téléphone, nous ne pouvons donc sauver le pays que par des courbes. Nous pouvons obtenir l'heure. Si l'application ne peut pas être appelée pendant une longue période, elle sera par défaut l'application. n'est pas installé, puis passez à la page de téléchargement. Bien sûr, ce n’est pas ce que j’ai imaginé, c’est ce que pensent les grands d’Internet. Ici, nous devons le subdiviser en deux situations.
1. Réveillez-vous directement
Remarque : vous pouvez modifier l'application via h5. Par exemple, visitez une URL, cliquez sur le bouton et ouvrez l'application. Si l'application APP n'est pas installée, accédez directement à la page de téléchargement de l'application de l'App Store. mieux en cliquant. S'il est installé avec l'application, il peut être réveillé dans les principaux navigateurs mobiles (navigateur 360, navigateur uc, navigateur Sogou, navigateur QQ, navigateur Baidu) et le client QQ. WeChat, le client Sina Weibo et le client Tencent Weibo ne peuvent pas être réveillés.
Le code est le suivant :
<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>Cliquez pour réveiller la démo</title></head><body><style>#zjmobliestart {font -size:40px;}</style><!--Description : Vous pouvez modifier l'application via h5. Par exemple, accédez à une URL, cliquez sur le bouton et ouvrez l'application. Si l'application APP n'est pas installée, accédez directement à l'application. Page de téléchargement de l'application du Store, en cliquant. La compatibilité est bonne. Si l'application est installée, elle peut être réveillée dans tous les principaux navigateurs mobiles (navigateur 360, navigateur uc, navigateur Sogou, navigateur QQ, navigateur Baidu) et client QQ. WeChat, le client Sina Weibo et le client Tencent Weibo ne peuvent pas être réveillés. --><a href=zjmobile://platformapi/startapp id=zjmobliestart target=_blank>Réveillez le 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 ( +nouvelle date - clickedAt < 2000){ window.location = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com' } }, 500 }, 500) } ; .getElementById(zjmobliestart).onclick = applink(); </script> </body></html>
2. Cliquez pour vous réveiller
Remarque : vous pouvez réactiver l'application via h5. Si vous visitez une URL, vous pouvez ouvrir directement l'application. Si l'application APP n'est pas installée, accédez directement à la page de téléchargement de l'application de l'App Store. Compatibilité générale : il peut être réveillé dans les principaux navigateurs de téléphones mobiles (navigateur 360, navigateur uc, navigateur Sogou, navigateur QQ et navigateur Baidu). WeChat, le client QQ, le client Sina Weibo et le client Tencent Weibo ne peuvent pas être réveillés.
Le code est le suivant :
<!Doctype html><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>Réveillez la démo directement</title></head><body><style>#zjmobliestart{ font -size:40px;}</style><!--Description : Vous pouvez réactiver l'application via h5. Si vous visitez une URL, vous pouvez ouvrir directement l'application. Si l'application APP n'est pas installée, sautez directement. à l'application. La page de téléchargement de l'APP du Store a une compatibilité générale : elle peut être réveillée dans tous les principaux navigateurs mobiles (navigateur 360, navigateur uc, navigateur Sogou, navigateur QQ, navigateur Baidu). Le client WeChat QQ, le client Sina Weibo et le client Tencent Weibo ne peuvent pas être réveillés. --><p id=zjmobliestart>Réveillez le 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 (+new Date - clickedAt < 2000){ window.location = 'https://itunes.apple.com/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#weixin.qq.com' } }, 500 }, 500) }applink() ; ;</script> </body></html>
De cette façon, nos besoins ont été satisfaits. Au cours de ce processus, nous avons également rencontré de nombreuses explications enthousiastes. Au début, certaines personnes n'ont pas compris mes besoins et pensaient que je l'implémentais du côté Android. Ils m'ont demandé de transmettre le nom du package. Pour vérifier si l'application est installée, enregistrez la méthode ici, le code est le suivant :
Pour plus de méthodes, veuillez consulter ma classe d'outils : CommonUtilLibrary
D'autres pensent que je veux invoquer l'application locale en chargeant la vue Web dans l'application. Je vais également l'enregistrer ici. Le code est le suivant :
webView.setWebViewClient(new WebViewClient(){ @Override public boolean ShouldOverrideUrlLoading(WebView view, String url) { Uri uri=Uri.parse(url); if(uri.getScheme().equals(abraham)&&uri.getHost(). égal(jingewenku.com)){ String arg0=uri.getQueryParameter(arg0); arg1=uri.getQueryParameter(arg1); }else{ view.loadUrl(url } return true }});
Il convient également de noter que si l'application locale est invoquée dans WeChat, le WeChat sur le téléphone mobile utilise le navigateur intégré de WeChat (vous pouvez envoyer l'adresse de la page précédemment obtenue sur le serveur à n'importe lequel de vos contacts, cliquez sur Envoyer un message pour ouvrir la page Web) Ouvrez cette simple page HTML. Remarque : il n'est pas possible d'ouvrir directement schéma://hôte/chaîne de données. WeChat n'analysera pas cette chaîne de caractères dans une URL. Elle doit être intégrée dans un site Web. page à parcourir avec WeChat. L'appareil est allumé. Après être entré, vous verrez la page que nous venons de concevoir. À ce stade, cliquer pour démarrer directement l'application ne réveillera pas l'application précédemment installée. Parce que WeChat l'a bloquée, vous devez choisir de l'ouvrir dans le navigateur dans le menu dans le coin supérieur droit. À l'heure actuelle, certains navigateurs peuvent se réveiller, mais d'autres ne le peuvent pas. Par exemple, si le navigateur intégré sur la machine de test MX4 de l'auteur ne fonctionne pas, UC Browser peut se réveiller. Certains navigateurs ne peuvent pas être réveillés. J'ai consulté beaucoup d'informations et je ne peux pas le résoudre complètement maintenant, c'est de laisser le front-end juger le navigateur qui rencontre le problème. il n'est pas pris en charge et quel navigateur doit être utilisé. Si un lecteur a une solution, n'hésitez pas à laisser un message, merci !
post-scriptum :
Pourquoi ne puis-je pas réactiver l'application dans WeChat et dois-je l'ouvrir avec un navigateur ?
Parce que WeChat a mis en œuvre un blindage de schéma sur toutes les connexions de partage, c'est-à-dire que tous les appels à un schéma dans les connexions de partage ont été bloqués par WeChat.
Alors pourquoi certaines applications peuvent-elles être évoquées, comme Dianping et Didi Taxi ?
D'un point de vue non technique, grâce à Dianping et Didi Taxi, ils sont à la fois filleuls et fils biologiques de WeChat. Il a une attention particulière pour son fils.
D'un point de vue technique, WeChat dispose d'une liste blanche et les appels de schéma ne seront pas bloqués pour les connexions partagées dans la liste blanche.
Vous ne comprenez pas ? Donnons un exemple.
Par exemple, le lien de partage de Dianping est http://dazhongdianping.share.1.com
Correspondant à la liste blanche de WeChat, il y aura un élément http://dazhongdianping. Tous les partages provenant de cette connexion ne bloqueront pas le schéma.
Par exemple http://dazhongdianping.share.2.com
http://dazhongdianping.share.3.com
Même une filiale de Dianping peut utiliser http://zigongsi.dazhongdianping.share.3.com. Le nom de domaine racine est également dans la liste blanche, il peut donc être utilisé.
À ce stade, tout le monde doit comprendre qu'il est impossible de contourner ce problème en empruntant le schéma de Dianping à moins que votre lien de partage puisse être lié au nom de domaine racine de Dianping.
Cette question doit être expliquée clairement. Une autre chose à mentionner est que lorsqu'il s'agit de télécharger un apk, WeChat bloque toute application, et les fils ne font pas exception. Donc, si vous souhaitez fournir un lien de téléchargement, que vous soyez un fils ou non. , vous ne pouvez pas échapper à l'utilisation d'un navigateur pour l'ouvrir. Parmi les méthodes faibles.
Annexe : Schémas d'URL pour les applications courantes
1. Application par défaut du système
nom | Schéma d'URL | Identifiant du paquet |
---|---|---|
Safari | http:// | |
cartes | http://maps.google.com | |
Téléphone | tél:// | |
SMS | sms:// | |
mailto:// | ||
iBooks | ibooks:// | |
Magasin d'applications | itms-apps://itunes.apple.com | |
Musique | musique:// | |
Vidéos | vidéos:// |
2. Logiciels tiers couramment utilisés
nom | Schéma d'URL | Identifiant du paquet |
---|---|---|
mqq:// | ||
weixin:// | ||
TencentWeibo | TencentWeibo:// | |
Taobao | taobao:// | |
Alipay | Alipay:// | |
sinaweibo:// | ||
Weico Weibo | weico:// | |
Navigateur QQ | navigateur mqq:// | com.tencent.mttlite |
navigateur uc | dauphin:// | com.dolphin.browser.iphone.chinese |
Ouvrir le navigateur | ohttp:// | com.oupeng.mini |
Navigateur Sogou | SogouMSE:// | com.sogou.SogouExplorerMobile |
Carte de Baidu | baidumap:// | com.baidu.map |
Chrome | googlechrome:// | |
Youku | tuku:// | |
Jingdong | openapp.jdmoble:// | |
tout le monde | renren:// | |
Meituan | imeituan:// | |
Magasin n°1 | wccbyihaodian:// | |
je vais vérifier | wcc:// | |
Dictionnaire Youdao | yddictproapp:// | |
Zhihu | Zhihu:// | |
Revoir | dianping:// | |
microdisque | disque sinav:// | |
Doubanfm | doubanradio:// | |
Classe ouverte NetEase | ntesopen:// | |
Le roi des cartes de visite polyvalentes | carte cam:// | |
QQ Musique | qqmusique:// | |
Vidéo Tencent | dixvidéo:// | |
Films Douban | film douban:// | |
Musique en nuage NetEase | Orphée:// | |
Actualités NetEase | application d'actualités:// | |
Application NetEase | apper:// | |
Loterie NetEase | ntescaipiao:// | |
Notes du nuage Youdao | vousdaonote:// | |
Voir plus | lecteur duokan:// | |
Indice national de la qualité de l'air | sale Pékin:// | |
Musique Baidu | baidumusique:// | |
Allez à la cuisine | xcfapp:// |
Ce qui précède représente l’intégralité du contenu de cet article. J’espère qu’il sera utile à l’étude de chacun. J’espère également que tout le monde soutiendra le réseau VeVb Wulin.