web-dev-qa-db-fra.com

mailto: liens n'ouvrant pas l'application de messagerie sur Android dans l'application Cordova

Ça me rend fou. Je travaille sur une application ionique (Cordova, Angular, etc.). J'ai un lien de contact qui contient un mailto: href

href="mailto:[email protected]?subject=my%20App"

J'ai lu d'innombrables publications sur SO qui disent que vous devez supprimer 

<access Origin="*"/>

depuis le fichier config.xml à la racine du projet et remplacez-le par:

<access Origin="mailto:*" launch-external="true" />

Ce que j'ai fait Lorsque je lance ionic build, il est ajouté au fichier config.xml dans platforms/Android/res/xml. Mais peu importe ce que je fais, le lien n'ouvre pas l'application de messagerie sur un simulateur Android (même si la messagerie est configurée dans le simulateur).

Malheureusement, je n'ai pas d'appareil sur lequel effectuer des tests - alors s'agit-il simplement d'un émulateur ou est-ce qu'il me manque quelque chose?

21
James J

Vous devez installer la liste blanche des plugins cordova :

cordova plugin add cordova-plugin-whitelist

ou si vous souhaitez enregistrer la référence dans votre fichier config.xml:

cordova plugin add cordova-plugin-whitelist --save

et que vous devez ajouter l'intention à votre fichier config.xml:

<allow-intent href="mailto:*" />

Vous pouvez trouver plus d'infos ici .

24
LeftyX

Je viens de résoudre ce problème grâce aux réponses et aux articles ci-dessus. Je ne suis pas sûr de ce qui a ou n'a pas changé depuis les publications ci-dessus, mais pour la référence des autres; Je travaille maintenant avec http://, https://, tel:, & mailto: avec uniquement le plug-in inappbrowser et aucune modification manuelle de config.xml n’est nécessaire. J'ai fait tout ce qui est mentionné ci-dessus et cela ne fonctionnait toujours pas. J'ai donc commencé à jouer et j'ai découvert que l'appel window.open() requiert le deuxième paramètre de "_system" pour fonctionner correctement (il a essayé d'utiliser le navigateur et de "naviguer" vers http://mailto:xxx... sans l'indicateur "_system". ).

Cependant, pour des raisons de curiosité, j'ai désinstallé le plug-in de liste blanche et supprimé les modifications manuelles dans config.xml et cela fonctionne toujours.

Remarques:

-Je ne me souviens pas de toutes les variations que j'ai essayées, mais onclick n'a pas pu accéder aux oscilloscopes Ionic/Angular/Cordova, alors je suis resté bloqué avec ng-click.

-J'ai pas/n'ai pas essayé d'utiliser href = "..." avec aucune des options. (Si je me souviens bien, je vais les tester et les mettre à jour pour refléter mes résultats.)

Ainsi, avec seulement le cordova-plugin-inappbrowser installé et les modifications no config.xml, voici mes solutions de travail/testées:

ng-click="window.open('http://somesite.com', '_system')"
ng-click="window.open('https://google.com', '_system')"
ng-click="window.open('tel:(123) 345-4567')"
ng-click="window.open('mailto:[email protected]', '_system')"

Testé le 20/09/2016 en utilisant:

HTC One M8, Android 6, cordova v6.3.1, cordova-plugin-inappbrowser v1.5.0, ionic v2.0.0, jdk1.8.0_101, SDK Android 21, 23 et 24 installés 

4
Chaos7703

Je suis passé par là aujourd'hui et j'ai remarqué quelque chose qui affectait les liens mailto, mais pas tel:

En plus d'ajouter l'intention à la configuration de cordova comme décrit dans la réponse de dave

<allow-intent href="mailto:*" />

J'ai également dû autoriser les liens mailto dans l'en-tête csp de ma page

<meta http-equiv="Content-Security-Policy" content="default-src 'self' mailto:*">

Nous n'avons pas vu de documentation sur ce comportement des en-têtes CSP.

3
Sarah Gallitz

et si vous remplaciez "vrai" par "oui" ... J'utilise ceci dans mon application et cela fonctionne.

<access Origin="tel:*" launch-external="yes"/>
3
dave

Essaye ça:

window.location.href = "mailto:[email protected]?subject=Works on iOS too";
2
poima

La modification de WhiteListPlugin de Cordova dans config.xml ne fonctionnait pas pour moi - <access >,`. J'ai essayé beaucoup de combinaisons, y compris celles ci-dessus. Cela ne veut pas dire que cela ne fonctionnera pas nécessairement, cela ne fonctionne pas pour ma configuration. (Création pour navigateur, Android et iOS)

Cependant, utiliser le plugin Cordova InAppBrowser a fonctionné:

Comme mentionné ci-dessus, utilisez le plug-in inAppBrowser et définissez la cible sur _system. 

Ceci évite les problèmes que je voyais dans iOS avec unsupported url et lance le navigateur Web des systèmes natifs (c'est-à-dire, ne compte pas sur WhiteListPlugin pour autoriser l'appel URL).

J'espère que cela t'aides.

Cordova version 6.3.1.

0
tkepa

Juste en plus d'utiliser Plugin Cordova WhiteList ;

Cela a fonctionné pour moi de la manière suivante: in config.xml 

<access Origin="*"/>
<access Origin="mailto:*" launch-external="true" />
<allow-intent href="mailto:*" launch-external="yes"/>

Et spécialement pour iOS ajouter:

<platform name="ios">
    <allow-navigation href="mailto:*" launch-external="yes"/>    
    ...
 <platform name="ios">
0
Nigidoz