Ionic2 mailto: и sms:?

#android #ionic-framework #ionic2

#Android #ионный фреймворк #ionic2

Вопрос:

Привет, я использую ionic2, пытаюсь открыть приложение для отправки sms и почты с помощью mailto: и sms: но получил ошибку net :: ERR_UNKNOWN_URL_SCHEME в Android, но хорошо работает в ios

Я уже добавляю allow-intent, access-origin и allow-navigation. Это в моем config.xml

 <access origin="*" />
<access origin="mailto:*" launch-external="true" />
<access origin="tel:*" launch-external="true" />
<access origin="sms:*" launch-external="true" />
<access origin="geo:*" launch-external="true" />
<access origin="maps:*" launch-external="true" />

<allow-intent href="http://*/*" launch-external="true" />
<allow-intent href="https://*/*" launch-external="true" />
<allow-intent href="tel:*" launch-external="true" />
<allow-intent href="sms:*" launch-external="true" />
<allow-intent href="mailto:*" launch-external="true" />
<allow-intent href="geo:*" launch-external="true" />

<allow-navigation href="sms:*" launch-external="true" />
<allow-navigation href="mailto:*" launch-external="true" />
 

Это моя ионная информация

 Cordova CLI: 6.3.1
Gulp version:  CLI version 3.9.0
Gulp local:   Local version 3.9.1
Ionic Framework Version: 2.0.0-rc.0
Ionic CLI Version: 2.1.0
Ionic App Lib Version: 2.0.0-beta.20
ios-deploy version: 1.9.0 
ios-sim version: 5.0.8 
OS: Mac OS X El Capitan
Node Version: v6.6.0
Xcode version: Xcode 8.0 Build version 8A218a
 

Я вызываю это в своем коде
window.location.href = 'mailto:name@domain.com';

Спасибо за совет

Комментарии:

1. Попробуйте удалить как allow-intent, так и allow-navigation. Однако сохраните источник доступа.

2. @Sam5487: Спасибо, чувак!! Ты рок!!

Ответ №1:

В моем приложении я использую

 <a [href]="sanitize('sms:'   item.sms)"><button ion-button outline><ion-icon name="ios-chatbubbles"></ion-icon></button></a>
<a href="mailto:{{item.email}}"><button ion-button outline><ion-icon name="ios-mail"></ion-icon></button></a>
 

Обратите внимание, что мне пришлось очистить sms, чтобы заставить его работать на устройствах, начиная примерно с последних двух выпусков, это становится небезопасным.

 import { DomSanitizer } from '@angular/platform-browser';

constructor(public public navCtrl: NavController, public sanitizer: DomSanitizer) {}

sanitize(url: string) {
return this.sanitizer.bypassSecurityTrustUrl(url);
}
 

config.xml

 <access origin="*"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
<allow-intent href="tel:*"/>
<allow-intent href="sms:*"/>
<allow-intent href="mailto:*"/>
<allow-intent href="geo:*"/>
<platform name="android">
  <allow-intent href="market:*"/>
</platform>
<platform name="ios">
  <allow-intent href="itms:*"/>
  <allow-intent href="itms-apps:*"/>
</platform>
 

Вместо window.open я использую что-то вроде этого для открытия URL-адресов

 <button (click)="launch('https://www.somewhere.com')">Launch URL</button>

launch(url) {
    this.platform.ready().then(() => {
        open(url, "_blank", "location=no");
    });
}
 

Пока это работает как на iOS, так и на Android для моего приложения.

Ответ №2:

Как я упоминал в комментарии к вашему вопросу, простое использование access origin решило вашу проблему, но важно знать, что делает каждый из них.

  1. Доступ: управляет тем, какие сетевые запросы (изображения, XHRS и т. Д.) Разрешено выполнять (с помощью встроенных перехватов cordova
  2. Разрешить-намерение: определяет, какие URL-адреса приложению разрешено запрашивать у системы для открытия. По умолчанию внешние URL-адреса не разрешены
  3. Разрешить навигацию: определяет, по каким URL-адресам можно перейти к самому WebView. Применяется только к навигации верхнего уровня.

Подробнее об этом читайте здесь: cordova-плагин-белый список. А также CSP.

Рад, что смог помочь.