Подтвердить что ты не робот

Mailto: ссылки, не открывающие приложение для почты на Android в приложении cordova

Это сводит меня с ума. Я работаю над Ionic-приложением (Cordova, Angular и т.д.). У меня есть ссылка с нами, которая содержит mailto: href

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

Я читал бесчисленные сообщения на SO, которые говорят, что вам нужно удалить

<access origin="*"/>

из config.xml в корне проекта и замените его на:

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

Что я сделал. Когда я запускаю ionic build, он добавляется в файл config.xml в platforms/android/res/xml. Но независимо от того, что я делаю, ссылка не открывает почтовое приложение на любом Android-симуляторе (даже если электронная почта настроена в симуляторе).

К сожалению, у меня нет устройства для тестирования - так это всего лишь вещь эмулятора или я что-то не хватает?

4b9b3361

Ответ 1

Вы должны установить список плагинов Cordova:

cordova plugin add cordova-plugin-whitelist

или если вы хотите сохранить ссылку на свой файл config.xml:

cordova plugin add cordova-plugin-whitelist --save

и что вы должны добавить намерение в свой файл config.xml:

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

Вы можете найти более подробную информацию здесь.

Ответ 2

что, если вы замените "true" на "yes"... Я использую это в своем приложении, и он работает.

<access origin="tel:*" launch-external="yes"/>

Ответ 3

Начнём на это сегодня и заметил что-то, что затронуло mailto, но не tel, ссылки:

В дополнение к добавлению намерения в конфигурацию кордовы, как описано с помощью dave answer

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

Мне также пришлось разрешать ссылки mailto в заголовке csp моей страницы

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

Не видел никакой документации вокруг этого поведения заголовков CSP.

Ответ 4

Я просто решил это благодаря ответам и статьям выше. Я не уверен, что было или не изменилось с тех пор, как было опубликовано выше, но для ссылок на других; Теперь у меня http://, https://, tel:, & mailto: работает только с плагином inappbrowser, и никаких ручных изменений в config.xml не требуется. Я сделал все, что упоминалось выше, и он все еще не работал, поэтому я начал играть и обнаружил, что для вызова window.open() требуется, чтобы второй параметр "_system" работал правильно (он попытался использовать браузер и "перейти" на http://mailto:xxx... без флага "_system").

Однако, ради любопытства, я удалил плагин whitelist и удалил ручные изменения в файле config.xml, и он все еще работает.

Примечания:

-Я не помню всех вариаций, которые я пробовал, но onclick не смог получить доступ к областям Ionic/ Angular/Cordova, поэтому я придерживался ng-click.

- Я не пытался/не пытался использовать href= "..." с любыми параметрами. (Если я помню, я буду проверять их и обновлять, чтобы отобразить мои результаты.)

Итак, только с установленным кордовым плагином-inappbrowser и без изменений config.xml, вот мои рабочие/проверенные решения:

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')"

Протестировано 9/20/2016 Использование:

HTC One M8, android 6, cordova v6.3.1, cordova-plugin-inappbrowser v1.5.0, ionic v2.0.0, jdk1.8.0_101, android SDK 21, 23 и 24 установлены

Ответ 5

Изменение Кордова WhiteListPlugin в config.xml не работает для меня - <access >,`. Я пробовал много комбинаций, в том числе выше. Не означает, что они не будут работать обязательно, только для моей настройки это не так. (Для браузера, Android и iOS)

Однако, используя плагин Cordova InAppBrowser, работал:

Как упоминалось выше, используйте плагин inAppBrowser и установите цель в _system.

Это передает проблемы, которые я видел в iOS с помощью unsupported url, и запускает собственный веб-браузер собственных систем (т.е. не полагается на WhiteListPlugin, чтобы разрешить URL-вызов).

Надеюсь, что это поможет.

Кордова версия 6.3.1.

Ответ 6

Попробуйте следующее:

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