Maison interface Web Tutoriel H5 Méthode d'instance H5 pour démarrer la page native de l'APP

Méthode d'instance H5 pour démarrer la page native de l'APP

Jun 25, 2017 am 10:02 AM
html5 原生 启动 总结

Je n'ai pas écrit de blog depuis longtemps. Récemment, il y a eu une demande pour que H5 démarre la page native de l'APP. J'ai rencontré quelques pièges dans le processus. J'ai lu certains plans de mise en œuvre en ligne et je les ai spécialement résumés. 🎜>

1. Nécessité de juger la plate-forme client et d'y accéder dans le navigateur WeChat

1. Jugement du client

Lors du démarrage de l'application, les systèmes Android et IOS la traitent. différemment. Puisque Android est ouvert, vous pouvez Dans le navigateur, via la balise et la balise méta, l'application du navigateur obtient l'autorisation d'ouvrir l'application sur le téléphone, puis démarre l'application.

Du côté d'IOS, les systèmes après IOS9 peuvent ajouter une configuration et l'écriture de code logique pendant le processus de développement de l'APP. Le système ouvrira l'APP correspondant à ce nom de domaine avant que le navigateur ne soit sur le point d'accéder à un nom de domaine. c'est un peu tape-à-l'œil, il y a quand même des avantages à être fermé.

Nous devons donc d'abord juger sur le client s'il s'agit d'un système Android ou d'un système IOS. Le code de jugement est le suivant

function isInIos(){var userAgentInfo = navigator.userAgent ,
        Agents = ["iPhone" , "iPad", "iPod"];for(var v = 0; v < Agents.length; v++) {if (userAgentInfo.indexOf(Agents[v]) > 0) {          return true;
        }
    }return false;
}
Copier après la connexion
2. c'est dans le navigateur intégré WeChat

Peu importe la plateforme sur laquelle le client est Android/IOS, il y a un problème lors de son accès sur la plateforme WeChat, c'est-à-dire que le client ne peut pas être démarré. limitation de WeChat pour des raisons de sécurité. Android bloque le protocole de schéma, sauf si l'entreprise est partenaire de WeChat et a rejoint la liste blanche, il peut

être utilisé. store correspondant à l’application, mais WeChat bloque souvent l’URL de l’App Store, la rendant inaccessible. Le moyen le plus pratique consiste à ouvrir la page de téléchargement de l'App Store dans le navigateur WeChat, qu'il s'agisse d'IOS ou d'Android (IOS finira par accéder à la page

appstore). Mon exigence ici est d'inviter l'utilisateur à cliquer sur "..." pour l'ouvrir avec le navigateur par défaut.

Pour déterminer s'il est dans WeChat, le code est le suivant :

function isInWx(){var agent = window.navigator.userAgent.toLowerCase();return agent.match(/MicroMessenger/i) == 'micromessenger';
}
Copier après la connexion

2. Principe

Tout d'abord, qu'il s'agisse d'Andorid ou d'IOS, il est impossible de déterminer si le téléphone mobile est équipé d'une application via JS dans le navigateur, même si le navigateur est autorisé à lire la liste des applications du téléphone mobile. , il n'existe pas d'API externe fixe permettant de faire une demande. L'application de démarrage H5 ouvre essentiellement l'application via le schéma d'URL

. Une application peut définir un ou plusieurs schémas d'URL pour ouvrir le sien. Le navigateur accédera au schéma d'URL d'une certaine application, puis si le système. est installé avec cette application, il demandera l'autorisation d'ouvrir l'application. En fait, cela peut être considéré comme une application de navigateur

ouvrant une autre application. iOS peut utiliser la méthode canOpenUrl de UIApplication pour détecter si le schéma d'URL peut ouvrir l'application correspondante, et Android est similaire. Bien sûr, si le schéma d'URL de saut JS ne répond pas, cela signifie également que le téléphone n'installe pas

l'application.

3. Plateforme Android

Modifiez d'abord AndroidManifest.xml, principalement pour ajouter le deuxième

<activity android:name=".activity.LoadingActivity"  android:label="${APP_NAME}"  android:screenOrientation="portrait"  android:theme="@style/FirstActivityTheme">  <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" />      <category android:name="android.intent.category.DEFAULT" />      <category android:name="android.intent.category.BROWSABLE" />      <data android:host="android"android:scheme="wushang" />  </intent-filter></activity>
Copier après la connexion
Par exemple, wushang ici est un schéma. Cela devrait être l'identifiant unique de l'application. Sinon, lorsque H5 se réveillera, une boîte de sélection apparaîtra pour choisir quelle application démarrer. Hôte signifie démarrer la page. En fait, cela devrait être remplacé par un nom de package tel que com.android.sky.

Dans ce cas, l'URL complète est wushang://android?data=sky, suivie du transfert de paramètres. Dans l'activité, vous pouvez utiliser le code suivant pour obtenir les paramètres

public void onCreate(Bundle savedInstanceState) {             
     Uri uridata = this.getIntent().getData();             
     String mydata = uridata.getQueryParameter("data");            
}
Copier après la connexion
Ensuite, vous pouvez faire une interception de chaîne ou autre.

Parlons du code front-end. Il y a deux situations ici

1 Lorsque la page est actualisée, demandez l'autorisation d'appeler l'application

.

C'est relativement simple, ajoutez simplement la balise méta

<meta http-equiv="refresh" content="0;url=wushang://android?data=sky">
Copier après la connexion
en tête en haut de la page. Lorsque la page sera actualisée, cette balise accédera au lien et. démarrez l’application. Mais il y a un problème. S'il s'agit du navigateur Safari du système Apple, un message d'erreur sera donné lors de l'accès à l'en-tête avec cette méta. Par conséquent, cet en-tête peut être transmis via l'en-tête

du client lors du rendu. la page sur le backend. Les classes sont ajoutées.

2. Appelez l'APP via un événement de clic

Le moyen le plus simple est bien sûr d'utiliser la balise a directement, comme suit

<a href="wushang://android">open Android app</a>
Copier après la connexion
Mais en utilisation réelle À l'heure actuelle, il est nécessaire de juger du type de plate-forme du client et de savoir s'il se trouve dans le navigateur intégré de WeChat, cette approche n'est donc certainement pas possible.

Ensuite, parlons d'un problème rencontré au cours du processus de développement et enregistrons-le. Parce que la bibliothèque d'outils utilisée sur le terminal mobile ici est zepto et que l'événement de clic utilisé est tap. Cependant, lorsque vous utilisez tap pour le traitement, vous devez souvent cliquer plusieurs fois pour activer l'application

<.>
<script type="text/javascript">
  $('#go').tap(function(){
      window.location.href = "wushang://android";
  });</script>
Copier après la connexion
Je ne connais pas la raison précise. Il se peut que l'événement Tap utilise une touche légère. Puis après quelques explorations, j'ai utilisé l'événement click, ou j'ai directement marqué la fonction handler sur la balise a pour éviter ce problème

<a id="go" >open Android app</a><a href="javascript:startApp()">
   open</a><script src="../res/lib/zepto.min.js?1.1.11"></script><script src="../res/lib/public.js?1.1.11"></script><script>$('#go').click(function () {       if(publicFun.isIos()){
          alert('it is IOS')
       }else{
          window.location.href = "wushang://android";
       }
    });function startApp(){       if(publicFun.isIos()){
          alert('it is IOS')
       }else{
          window.location.href = "wushang://android";
       }
    }</script>
Copier après la connexion
J'ai donc décidé de l'utiliser si je rencontre cela genre de problème à l'avenir. Ce qui suit est la fonction de traitement réelle

En fait, il existe un moyen très simple, qui consiste à accéder directement à l'application. Que ce soit sur Android ou IOS, ainsi que sur WeChat et non-WeChat. La page de téléchargement de l'App Store a deux fonctions : téléchargement et ouverture (si elle est sur la plateforme IOS, c'est en se connectant à l'App Store)

4. Plateforme IOS

Pour le problème de non-ouverture dans iOS9 et versions ultérieures, iOS9 fournit en fait une meilleure solution : lien universel.

Il s'agit d'une fonctionnalité lancée par iOS9. Si votre application prend en charge les liens universels, vous pouvez facilement lancer l'application via un lien HTTP traditionnel (si votre application est déjà installée sur l'appareil iOS) (pas besoin de créer une application). tout jugement supplémentaire, etc.), ou ouvrez une page web (votre application n'est pas installée sur l'appareil iOS). Peut-être que cela peut être expliqué plus simplement. Avant iOS9, pour la nécessité de réveiller l'APP à partir de divers navigateurs, Safari, UIWebView ou WKWebView, nous ne pouvions généralement utiliser que le schéma.

Ce qui précède vient de l'introduction sur les liens universels sur Internet. Pour le front-end, en termes simples, vous accédez à une URL http si cette URL contient du contenu correspondant aux règles du fichier de configuration que vous avez soumis au développement. plate-forme, le système iOS essaiera d'ouvrir votre application. Si elle ne peut pas être ouverte, le système vous redirigera vers le lien que vous souhaitez visiter dans le navigateur. C'est un très bon attribut, car grâce à cet attribut, nous pouvons contourner l'interception de WeChat et ouvrir l'application sur iOS9.

Donc, l'événement de clic ci-dessus sert simplement à accéder à l'App Store, car si l'application est installée, elle sera déjà dans l'APP lorsque le navigateur y accédera.

Ce sont toutes des choses de configuration IOS, donc je n'écrirai pas plus. En ce qui concerne le passage des paramètres et l'orientation de la page, cela équivaut en fait à obtenir l'URL actuellement connectée dans UIWebView, puis à effectuer un fractionnement et une vérification des chaînes pour déterminer à quelle page accéder et obtenir les valeurs des paramètres.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Bordure de tableau en HTML Bordure de tableau en HTML Sep 04, 2024 pm 04:49 PM

Guide de la bordure de tableau en HTML. Nous discutons ici de plusieurs façons de définir une bordure de tableau avec des exemples de bordure de tableau en HTML.

Tableau imbriqué en HTML Tableau imbriqué en HTML Sep 04, 2024 pm 04:49 PM

Ceci est un guide des tableaux imbriqués en HTML. Nous discutons ici de la façon de créer un tableau dans le tableau ainsi que des exemples respectifs.

Marge gauche HTML Marge gauche HTML Sep 04, 2024 pm 04:48 PM

Guide de la marge HTML gauche. Nous discutons ici d'un bref aperçu de la marge gauche HTML et de ses exemples ainsi que de son implémentation de code.

Disposition du tableau HTML Disposition du tableau HTML Sep 04, 2024 pm 04:54 PM

Guide de mise en page des tableaux HTML. Nous discutons ici des valeurs de la mise en page des tableaux HTML ainsi que des exemples et des résultats en détail.

Espace réservé d'entrée HTML Espace réservé d'entrée HTML Sep 04, 2024 pm 04:54 PM

Guide de l'espace réservé de saisie HTML. Nous discutons ici des exemples d'espace réservé d'entrée HTML ainsi que des codes et des sorties.

Déplacer du texte en HTML Déplacer du texte en HTML Sep 04, 2024 pm 04:45 PM

Guide pour déplacer du texte en HTML. Nous discutons ici d'une introduction, du fonctionnement des balises de sélection avec la syntaxe et des exemples à implémenter.

Liste ordonnée HTML Liste ordonnée HTML Sep 04, 2024 pm 04:43 PM

Guide de la liste ordonnée HTML. Ici, nous discutons également de l'introduction de la liste et des types HTML ordonnés ainsi que de leur exemple respectivement.

Bouton HTML onclick Bouton HTML onclick Sep 04, 2024 pm 04:49 PM

Guide du bouton HTML onclick. Nous discutons ici de leur introduction, de leur fonctionnement, des exemples et de l'événement onclick dans divers événements respectivement.

See all articles