升级到 cordova 3.6.3 后,“tel”、“sms”和“mailto”在 Android 中不再工作



我最近将基于科尔多瓦的Android应用程序从3.5.0升级到3.6.3。特殊链接"电话"、"短信"和"邮件"停止工作。单击时,没有任何反应。我可以在AndroidManifest.xml或Confix中做些什么.xml或者其他任何事情来让它们恢复工作吗?

我构建了两个相同且非常简单的 android 应用程序来证明我的怀疑,一个是 cordova 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

在索引.html中,我在设备就绪块上添加了上面的电话链接。

请帮忙。

我终于找到了答案。您所要做的就是将以下内容添加到 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 科尔多瓦安全问题

我有一个基于 3.5.1 版本构建的应用程序,所有特殊链接都工作正常。但是当我升级到最新版本 3.6.3 时,它们不起作用。

所以我对代码进行了以下更改,现在它们工作正常。

  1. 添加应用浏览器插件

    Cordova plugin add org.apache.cordova.inappbrowser

  2. 在JS文件中创建自定义函数以在应用程序内浏览器中打开特殊链接

    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');
        }
    

    };

  3. 您调用特殊链接(如短信或电话(的地方传递包含数据的自定义 URL,并让它打开本机浏览器窗口,进而推动本机应用程序处理特殊网址。

举几个例子:

<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>

从 Cordova 4.0 开始,您必须包含白名单插件。

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

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

修改科尔多瓦白名单

其中一个安全修复程序涉及为非http/s协议创建新的白名单。如果您的应用程序使用除http://https://之外的其他协议,例如sms:mailto:geo:tel:等,则需要进行一些配置更改才能将这些协议添加到白名单中。

这很容易做到:

    打开 Cordova config.xml 文件,位于:yourProject --> apps --> yourProject --> android --> native -->
  1. res --> xml --> config.xml。注意:如果你有一个文件位于你的项目 --> apps --> 你的项目 --> android --> nativeResources --> res --> xml,你将不得不对此文件进行更改(在 nativeResources 文件夹下(,因为如果此文件存在,它将在重建应用程序时覆盖/native/文件夹中的配置.xml。
  2. 滚动到您的白名单条目。您应该会看到如下所示的项目:

    <access origin="https://my.company.com/resources" />
    <access origin="http://*.othersupplier.com" />
    
  3. 对于您使用的每个非 http/https 协议,您必须添加一个白名单条目,如下所示:

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

launch-external 属性将告诉 Cordova 允许此 URL 由 Android 系统中的其他应用程序处理,而不是由当前运行的 Cordova/Worklight 应用程序处理。

这意味着当用户点击<a href="sms:555...">链接时,Android 将允许注册的任何应用程序sms:处理请求。

如果白名单中的唯一条目如下所示:

<access origin="*" />

然后,您的应用程序将允许向任何 Internet 资源发出资源请求,这可能会使您的应用程序受到某些类型的攻击。

您应该在此标记中列出您希望能够访问的特定域。

如果您的白名单如下所示:

<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>

添加到文件"配置.xml":

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

源:

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

如果你的配置中有这些行.xml,然后把它们注释掉。

<!--<allow-navigation href="*" />
<allow-navigation href="*://*" />-->

最新更新