1

Cordova Android 是一个 Android 应用程序库,允许为 Android 平台构建基于 Cordova 的项目。基于 Cordova 的应用程序的核心是使用 Web 技术编写的应用程序:HTML、CSS 和 JavaScript。Apache Cordova 是 Apache 软件基金会 (ASF) 的一个项目。

我使用 Cordova 开发了一个应用程序,它可以在 iOS 和 Android 上按预期工作,当签名的应用程序从 Android Studio 直接部署到三星 S6 时。

但是,当从 Google Play 下载应用程序时,它不会从 HTTPS 请求中获取请求的数据。

以下是 config.xml 中的白名单设置:

<plugin name="cordova-plugin-whitelist" version="1" />
<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>

以及 index.html 中的 CSP 设置

<meta http-equiv="Content-Security-Policy" content="default-src 'self' gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src *; connect-src *">

这是未获取数据的请求(没有任何有意义的错误消息 - e.type 只是一个空字符串)

_routingControl = L.Routing.control({
                                        plan: L.Routing.plan([
                                            L.latLng(coords),
                                            L.latLng(_userMarker.getLatLng())
                                        ],{
                                            createMarker: function() {return false}
                                        }),
                                        fitSelectedRoutes: true,
                                        autoRoute: true,
                                        show: false,
                                        serviceUrl: 'https://router.project-osrm.org/viaroute'
                                     });

由于这适用于 iOS,我认为白名单/CSP 设置存在问题。

有人可以解释为什么从应用商店下载应用时这不起作用吗?

4

1 回答 1

0

@barbu,您只需一秒钟即可解决。

令我困惑的一件事是开发人员从“开发 IDE”转向Google Play。作为使用Phonegap Build 构建的人,我的工作流程不包括电缆和“adb”。也许你可以解释这个过程的原因。

在您的问题上,您将需要实施白名单系统。这个工作表应该会有所帮助。
如何应用 Cordova/Phonegap 白名单系统

还有从那里链接到白名单 CSP 示例的文档。简而言之,它通常的应用方式是从网络浏览器扩展 CSP,然后将元元素添加到 App 中。但是,在您的情况下,您可能会倒退。

修复

通常,当我给出答案时,我会给出白名单CSP。您可以从CSP开始。祝你好运。

将此添加到您的config.xml

<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" /> <!-- Required for iOS9 -->

注意您的应用程序现在不安全。保护您的应用程序由您决定。
将以下内容添加到您的index.html

<meta http-equiv="Content-Security-Policy" 
         content="default-src *; 
                  style-src * 'self' 'unsafe-inline' 'unsafe-eval'; 
                  script-src * 'self' 'unsafe-inline' 'unsafe-eval';">

旁注: gap:就我现在所拥有的而言,仅 Cordova iOS 需要,请参见:Simon Mac Donald 添加

于 2015-12-10T01:32:39.253 回答