{"id":300,"date":"2015-02-26T14:47:41","date_gmt":"2015-02-26T13:47:41","guid":{"rendered":"http:\/\/lalloue.fr\/blog\/?p=300"},"modified":"2015-03-02T18:01:14","modified_gmt":"2015-03-02T17:01:14","slug":"ouvrir-une-application-externe-depuis-une-application-cordova","status":"publish","type":"post","link":"http:\/\/lalloue.fr\/blog\/ouvrir-une-application-externe-depuis-une-application-cordova\/","title":{"rendered":"Ouvrir une application externe depuis une application Cordova"},"content":{"rendered":"<p><a href=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2014\/12\/Apache_Cordova1.png\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-212\" src=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2014\/12\/Apache_Cordova1-300x89.png\" alt=\"Apache_Cordova1\" width=\"300\" height=\"89\" srcset=\"http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2014\/12\/Apache_Cordova1-300x89.png 300w, http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2014\/12\/Apache_Cordova1-1024x305.png 1024w, http:\/\/lalloue.fr\/blog\/wp-content\/uploads\/2014\/12\/Apache_Cordova1.png 1680w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Pendant le d\u00e9veloppement d&#8217;une de mes applications hybrides avec AngularJS, j&#8217;ai eut besoin de cr\u00e9er une page listant les autres applications que j&#8217;ai d\u00e9velopp\u00e9 disponibles sur le Store.<\/p>\n<p>Jusque l\u00e0 pas grand chose de compliqu\u00e9, je construis ma vue et j&#8217;ajoute \u00e0 chaque \u00e9l\u00e9ment l&#8217;url de l&#8217;application sur le store.<\/p>\n<p>Sauf que l&#8217;url ouvre la page web du store dans la webview de mon application directement, et du coup au clic sur installer \u00e7a ne marche pas&#8230;et je ne peux pas pas retourner sur mon application non plus o_O!<\/p>\n<p>Mais alors comment je fais?<\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<h3>Petit rappel\u00a0:<\/h3>\n<p>Comme vous le savez s\u00fbrement, une application hybride Cordova s\u2019ex\u00e9cute dans une &#8216;webview&#8217; contenue dans l&#8217;application native g\u00e9n\u00e9r\u00e9e.<\/p>\n<p>Cette webview est donc un conteneur dans lequel on peut ex\u00e9cuter une page web ou d\u00e9velopper une page web (html, css, javascript&#8230;).<\/p>\n<p>On peut presque dire que c&#8217;est un <strong>mini navigateur web embarqu\u00e9<\/strong>.<\/p>\n<p>Et donc qu&#8217;est ce qui se passe dans un navigateur quand on clique sur un lien? Le lien est ouvert dans la m\u00eame page du navigateur !<\/p>\n<p>Et bien il se passe la m\u00eame chose dans la webview, le lien s&#8217;ouvre dans la webview de l&#8217;application.<\/p>\n<p>&nbsp;<\/p>\n<h3>Comment contourner ce probl\u00e8me ?<\/h3>\n<p>Heureusement, il existe un plugin pour \u00e7a !<\/p>\n<p>Le plugin en question s\u2019appelle <span style=\"color: #239ddd;\">&#8220;InAppBrowser&#8221;<\/span> et est t\u00e9l\u00e9chargeable ici :\u00a0<a href=\"http:\/\/plugins.cordova.io\/#\/package\/org.apache.cordova.inappbrowser\">http:\/\/plugins.cordova.io\/#\/package\/org.apache.cordova.inappbrowser<\/a><\/p>\n<p>Contrairement \u00e0 ce que pourrait faire penser son nom, il ne permet pas que d&#8217;utiliser le navigateur int\u00e9gr\u00e9 dans l&#8217;application.<\/p>\n<p>&nbsp;<\/p>\n<h3>Installation :<\/h3>\n<p>Pour l&#8217;installation, rien de bien compliqu\u00e9, il suffit d&#8217;utiliser votre commande habituelle pour installer un plugin Cordova :<\/p>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\"> cordova plugin add org.apache.cordova.inappbrowser <\/pre>\n<p>&nbsp;<\/p>\n<h3>Utilisation :<\/h3>\n<p>Et donc maintenant pour ouvrir notre application externe il suffit d&#8217;utiliser l&#8217;appel javascript suivant :<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nvar ref = window.open(url, target, options);\r\n<\/pre>\n<ul>\n<li>Le param\u00e8tre &#8216;url&#8217; correspond \u00e0 l&#8217;url de l&#8217;application externe que l&#8217;on souhaite ouvrir.<\/li>\n<li>Le param\u00e8tre &#8216;target&#8217; correspond \u00e0 l&#8217;endroit o\u00f9 va s&#8217;ouvrir le lien\n<ul>\n<li>&#8216;_blank&#8217; ouvre le lien dans l&#8217;application utilis\u00e9e<\/li>\n<li>&#8216;_system&#8217; ouvre le lien par le syst\u00e8me (navigateur syst\u00e8me ou store par exemple)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Par exemple, je suis dans mon application sous Windows Phone et je veux ouvrir l&#8217;application &#8216;<span style=\"color: #239ddd;\">Average<\/span>&#8216;, l&#8217;url qui correspond est donc :\u00a0&#8220;<a href=\"http:\/\/www.windowsphone.com\/fr-fr\/store\/app\/average\/53817352-6852-4fb3-bc28-dac51c30c1d8\">http:\/\/www.windowsphone.com\/fr-fr\/store\/app\/average\/53817352-6852-4fb3-bc28-dac51c30c1d8<\/a>&#8220;.<\/p>\n<p>Les urls \u00e0 fournir doivent suivre le template suivant :<\/p>\n<ul>\n<li><span style=\"color: #000000;\"><strong>Android<\/strong> :\u00a0https:\/\/play.google.com\/store\/apps\/details?id=<span style=\"color: #99cc00;\">&lt;bundleId&gt;<\/span><\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>iOS<\/strong> :\u00a0https:\/\/itunes.apple.com\/fr\/app\/<span style=\"color: #99cc00;\">&lt;appName&gt;<\/span>\/id<span style=\"color: #99cc00;\">&lt;appId&gt;<\/span>?mt=8<\/span><\/li>\n<li><span style=\"color: #000000;\"><strong>Windows phone<\/strong> :\u00a0http:\/\/www.windowsphone.com\/fr-fr\/store\/app\/<span style=\"color: #99cc00;\">&lt;appName&gt;<\/span>\/<span style=\"color: #99cc00;\">&lt;appId&gt;<\/span><\/span><\/li>\n<\/ul>\n<p>Et voici un exemple du code avec AngularJs permettant d&#8217;ouvrir une application externe :<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n$scope.goToStore = function(url) {\r\n\t\/\/ inappbrowser cordova plugin is necessary to do external redirection\r\n\twindow.open(url, '_system');\r\n};\r\n<\/pre>\n<p>A noter que ce m\u00e9canisme permet \u00e9galement d&#8217;ouvrir tout lien externe (site web, apps, &#8230;)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pendant le d\u00e9veloppement d&#8217;une de mes applications hybrides avec AngularJS, j&#8217;ai eut besoin de cr\u00e9er une page listant les autres applications que j&#8217;ai d\u00e9velopp\u00e9 disponibles sur le Store. Jusque l\u00e0 pas grand chose de compliqu\u00e9, je construis ma vue et j&#8217;ajoute \u00e0 chaque \u00e9l\u00e9ment l&#8217;url de l&#8217;application sur le store. Sauf que l&#8217;url ouvre la &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/lalloue.fr\/blog\/ouvrir-une-application-externe-depuis-une-application-cordova\/\" class=\"more-link\">Continuer la lecture <span class=\"screen-reader-text\"> \u00ab\u00a0Ouvrir une application externe depuis une application Cordova\u00a0\u00bb<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[17,15,9],"tags":[19,24,39],"_links":{"self":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/300"}],"collection":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/comments?post=300"}],"version-history":[{"count":6,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/300\/revisions"}],"predecessor-version":[{"id":315,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/300\/revisions\/315"}],"wp:attachment":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/media?parent=300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/categories?post=300"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/tags?post=300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}