Deeplinking les navigateurs mobiles à l'application native - des Problèmes avec Chrome lorsque l'application n'est pas installée
J'ai une page web, ce qui permet de l'appeler entry.html
.
Lorsqu'un utilisateur saisit cette page, un code javascript (voir ci-dessous) est de tenter de lien profond à l'utilisateur de le natif iOS /Android app.
Si le lien profond échoue (probablement si l'application n'est pas installé sur l'appareil), l'utilisateur doit "chute en arrière" vers une autre page - appelons cela fallback.html
.
voici le code javascript qui s'exécute sur entry.html
:
$(function(){
window.location = 'myapp://';
setTimeout(function(){
window.location = 'fallback.html';
}, 500);
});
c'est un standard du deep-linking méthode est recommandée à tous sur le réseau; essayez de lien profond, et si le délai d'extinction des incendies cela signifie que le lien profond n'a pas eu lieu - afin de secours.
cela fonctionne bien, tant application est installée sur l'appareil.
mais si l'application n'est pas installé, c'est le comportement lors de la tentative de lien profond:
Mobile Safari: je vois un message d'alerte disant: "Safari ne peut pas ouvrir cette page", pour un moment, puis il tombe-dos correctement à fallback.html
- ce qui est le comportement attendu.
Mobile Chrome est mon problème.
lorsque l'application n'est pas installé, le navigateur est en fait redirigé vers le myapp://
url, ce qui est, bien sûr, non valide - si je reçois un "non trouvé" la page, et ne se produit pas.
Enfin- ma question est:
Comment puis-je corriger mon code afin de repli SE FERA sur mobile Chrome ainsi? tout comme le navigateur Safari mobile?
remarque: je vois que LinkedIn site web mobile fait cela correctement, avec Safari & Chrome, avec ou sans l'application installée, mais je ne pouvais pas suivre le code responsable 🙁
note2: j'ai essayé en ajoutant un iframe
au lieu de window.location = url
, cela ne fonctionne que sur Safari mobile Chrome n'a pas de lien profond lors de l'ajout d'un iFrame, même si l'application est installée.
Merci à tous!
Mise à JOUR:
j'ai trouvé une solution convenable, et d'avoir répondu à ma propre question. voir accepté de répondre pour ma solution.
- Une question similaire ici stackoverflow.com/questions/5679918/...
- merci. mais cela ne veut pas répondre à ma question. comment traiter avec les mobiles Chrome lorsque l'application n'est pas installée?
- Voici un suivi après, être prudent yo lire les commentaires de l'auteur ne savais pas à propos http liens: aawaara.com/post/88310470252/...
- je vais vérifier et mettre à jour bientôt. merci
- Hey @geevee. Je le recommande simplement abstraction de tout cela loin dans la Direction générale de service (branche.io) - un projet que je contribue. Direction générale des liens de prendre soin de toute cette complexité pour vous et choisir la bonne méthode en fonction du navigateur. Le problème avec votre réponse sélectionnée est le sélecteur. C'est ennuyeux pour un utilisateur de le faire et souvent, les gens abandonnent. Si vous utilisez les intentions de google Chrome et d'autres mécanismes pour Firefox/navigateur par défaut/d'autres, il va tout simplement de façon transparente ouvrir l'application.
Vous devez vous connecter pour publier un commentaire.
pour quiconque est intéressé, j'ai réussi à trouver une bonne solution pour résoudre ces problèmes avec deeplinking Chrome sur Android.
j'ai abandonné le
myapp://
approche, je l'ai laissé fonctionnement uniquement dans le cas d'un appareil iOS.pour les appareils Android, je suis maintenant en utilisant
intents
qui sont conceptuellement différentes que lemyapp://
protocole.Je suis principalement un développeur web, pas un développeur Android, donc il m'a fallu du temps pour comprendre le concept, mais c'est assez simple. je vais essayer d'expliquer et de démontrer MA solution ici (à noter qu'il existe d'autres approches qui pourraient être mis en œuvre avec
intents
, mais celui-ci a fonctionné parfaitement pour moi).voici la partie pertinente dans l'application Android manifeste, l'enregistrement de l'intention de règles (note de l'
android:scheme="http"
- nous en parlerons sous peu):maintenant, après ce qui est déclaré dans le manifeste de l'application, je suis envoyer moi un email avec "http://www.myapp.com" dans le message.
lorsque le lien est capté par l'appareil Android, un "sélecteur" boîte de dialogue apparaît, vous demandant avec quelle application je veux ouvrir le suivant? [chrome, myapp]
la raison de cette boîte de dialogue est venu à la frappe sur un "régulier" de l'url, c'est parce que nous avons enregistré l'intention avec la http régime.
avec cette approche, le deeplink n'est même pas traitée dans la page web, il est géré par l'appareil lui-même, lorsque vous appuyez sur un lien correspondant à une intention de la règle définie dans l'application Android manifeste.
et oui, comme je l'ai dit, cette approche est différente par concept que celui d'iOS approche, qui appelle le deeplink à partir de la page web, mais il résout le problème, et il fait la magie.
Remarque: lors de l'application n'est pas installée, pas de sélecteur de boîte de dialogue va apparaître, vous obtenez l'accès à la page web avec l'adresse donnée (sauf si vous avez plus de 1 navigateur, de sorte que vous aurez besoin de choisir un... mais permet de ne pas être petite).
j'espère vraiment que cela pourrait aider quelqu'un qui est confronté à la même chose.. j'avais une telle explication 😉
acclamations.
Il est très important de s'assurer que lorsque vous essayez d'ouvrir un deeplink URL avec JavaScript que l'URL est correctement formaté pour l'appareil et navigateur. (Si vous n'utilisez pas le approprié deeplink URL du navigateur/plate-forme, l'utilisateur peut être redirigé vers une “Page Non Trouvée”, qui est ce que vous ressentez.)
Maintenant, vous devez noter que Chrome sur Android a un autre format de l'URL de l'ancien navigateur Android standard 1! Vous avez besoin d'annoter les liens profonds à l'aide de
href="android-app://"
dans le code HTML de vos pages web. Vous pouvez le faire dans la section pour chaque page web par l'ajout d'une balise et en précisant le lien profond comme un autre URI.Par exemple, le code HTML suivant montre comment vous pouvez indiquer la profondeur du lien dans une page web qui a l'exemple de l'URL://gadgets.
Pour plus de détails, voir les références ici:
https://developer.chrome.com/multidevice/android/intents
https://developers.google.com/app-indexing/webmasters/server
https://developer.android.com/training/app-indexing/enabling-app-indexing.html#webpages
Et voici un lien profond outil de test pour Android: https://developers.google.com/app-indexing/webmasters/test.html
Espère que ça aide.
1 Depuis l'ancien PSBA navigateur a été remplacé par le chrome, c'est maintenant la méthode par défaut pour gérer les liens profonds pour les dernières versions d'Android. Néanmoins, Android nécessite encore un conditionnel soltion, car les anciennes versions de systèmes d'exploitation utilisent encore le PSBA navigateur.
J'ai créé un plugin Javascript qui prend en charge la plupart des navigateurs modernes sur mobile. Mais il nécessite d'avoir du deep linking, des pages d'atterrissage pour être hébergé sur des croix domaine(différent universelle lien url) pour travailler sur ios9 Facebook en utilisant universelle de la liaison. Il y a aussi autre façon d'obtenir que le travail sur le Facebook iOS9 à l'aide de Facebook SDK. Je suis le partage de cette si quelqu'un pourrait trouver cela utile. Actuellement, il n'a pas de secours, mais si retombe sur l'App Store.
https://github.com/prabeengiri/DeepLinkingToNativeApp
Je suis en Utilisant ce Code pour deeplinking.
Si l'application est installée l'application va s'ouvrir..
Si l'application n'est pas installé, alors ce qui reste comme il est..
Si vous souhaitez ajouter toute autre condition pour l'application pas de l'installer puis il suffit de décommenter la setTimeout code .