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

"tel", "sms" и "mailto" больше не работают в Android после обновления до кордовы 3.6.3

Недавно я обновил приложение для Android на основе cordova от 3.5.0 до 3.6.3. Специальные ссылки "tel", "sms" и "mailto" перестали работать. При нажатии ничего не происходит. Есть ли что-нибудь, что я могу сделать в AndroidManifest.xml или Confix.xml или что-нибудь еще, чтобы вернуть их обратно?

Я построил два одинаковых и очень простых приложения для Android, чтобы доказать свое подозрение, один с кордорой 3.5.0 и один с 3.6.3. У обоих из них есть простая ссылка:

<a href="tel:1(858)xxx-xxxx">Call</a>

Первый работает, второй не работает.

Я думаю, они добавили функцию безопасности, которая каким-то образом блокирует намерения.

PS: оба приложения построены следующим образом:

cordova create app com.tmp.app "App"
cordova platform add android

и в index.html, я добавил телефонную ссылку выше в готовом блоке устройства.

Пожалуйста, помогите.

4b9b3361

Ответ 1

Наконец-то я нашел ответ. Все, что вам нужно сделать, это добавить в config.xml следующее:

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

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

Все началось с IBM!!!

Проблемы безопасности IBM Cordova

Ответ 2

У меня было приложение, построенное на версии 3.5.1, и все специальные ссылки работали отлично. Но когда я обновил последнюю версию 3.6.3, они не сработали.

Итак, я сделал следующие изменения в коде, и теперь они отлично работают.

  • Добавить плагин InAppBrowser

    плагин cordova добавить org.apache.cordova.inappbrowser

  • Создайте пользовательскую функцию в вашем JS файле, чтобы открыть специальные ссылки в браузере InApp

    var app = {
            initialize: function() {
            this.bindEvents();
        },         
        bindEvents: function() {
            document.addEventListener('deviceready', this.onDeviceReady, false);
        },         
        onDeviceReady: function() {
            app.receivedEvent('deviceready');
        },
        openNativeAppWindow: function(data) {
            window.open(data, '_system');
        }
    

    };

  • Место, где вы вызываете специальные ссылки, такие как sms или tel, затем передайте свой собственный URL-адрес с данными и откройте его собственный браузер окно, которое, в свою очередь, будет подталкивать собственное приложение для обработки специальных URLs.

Пример:

<br><br><input type="button" onClick="app.openNativeAppWindow('http://google.com')" value="Open Google"/>
            <br><br><a onClick="app.openNativeAppWindow('geo://0,0?q=dallas')" data-rel="external">google maps</a>
            <br><br><a onClick="app.openNativeAppWindow('geo:0,0?q=Bacau')">Geolocation Test</a>
            <br><br><a onClick="app.openNativeAppWindow('geo:0,0?q=34.99,-106.61(Treasure)')">longitude & latitude with a string label</a>
            <br><br><a onClick="app.openNativeAppWindow('geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA')">street address Test</a>
            <br><br><a onClick="app.openNativeAppWindow('sms:2125551212')">SMS</a>
            <br><br><a onClick="app.openNativeAppWindow('mms:2125551212')">MMS</a>
            <br><br><a onClick="app.openNativeAppWindow('tel:2125551212')">Open Phone Dialer</a>

Ответ 3

Изменить белый список Кордовы

Одно из исправлений безопасности связано с созданием нового белого списка для протоколов http/s. Если ваше приложение использует другие протоколы помимо http:// и https://, например sms:, mailto:, geo:, tel: и т.д., Тогда вам нужно будет внести некоторые изменения в конфигурацию, чтобы добавить эти протоколы в Белый список.

Это легко сделать:

  • Откройте файл config.xml Cordova, расположенный по адресу: yourProject → apps → yourProject → android → native → res → xml → config.xml. Примечание. Если у вас есть файл, расположенный в вашем проекте → apps → yourProject → android → nativeResources → res → xml, вам придется внести изменения в этот файл (в папке nativeResources), так как если этот файл существует, он перезапишет файл config.xml в /native/, когда приложение будет перестроено.
  • Прокрутите до списка белых списков. Вы должны увидеть элементы, перечисленные ниже:

    <access origin="https://my.company.com/resources" />
    <access origin="http://*.othersupplier.com" />
    
  • Для каждого используемого протокола non http/https вам нужно будет добавить запись в белый список следующим образом:

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

Внешний атрибут запуска будет сообщать Кордове, что этот URL-адрес может обрабатываться другими приложениями в системе Android, а не с помощью текущего приложения Cordova/Worklight.

Это будет означать, что когда пользователь нажимает на ссылку <a href="sms:555...">, Android позволит любому зарегистрированному приложению sms: обрабатывать запрос.

Если единственная запись в вашем белом списке выглядит так:

<access origin="*" />

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

Вы должны указать конкретные домены в этом теге, к которым вы хотите иметь доступ.

Если ваш белый список выглядит так:

<access origin="https://www.ibm.com" />
<access origin="https://my-worklight-server.company.com" />

и внутри вашего приложения вы используете протокол mailto: для открытия клиентского почтового клиента и протокол geo: для отображения карты, тогда вы должны изменить белый список, чтобы он выглядел следующим образом:

<access origin="https://www.ibm.com" />
<access origin="https://my-worklight-server.company.com" />
<access origin="mailto://*" launch-external="true" />
<access origin="geo://*" launch-external="true" />

HTML:

<a href="tel:+212x-xx-xx-xx-xx">Call</a>

Добавить в файл "config.xml":

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

источник:

https://www.ibm.com/developerworks/community/blogs/worklight/entry/action_required_cordova_android_security_update?lang=en`

Ответ 4

Как и в случае с Cordova 4.0, вы должны включить плагин whitelist.

<gap:plugin name="cordova-plugin-whitelist" source="npm" />
<allow-intent href="tel:*" />

https://github.com/apache/cordova-plugin-whitelist