【发布时间】:2015-12-07 22:50:08
【问题描述】:
Cordova Android 是一个 Android 应用程序库,它允许 为 Android 平台构建的基于 Cordova 的项目。科尔多瓦 基于应用程序的核心是使用 Web 编写的应用程序 技术:HTML、CSS 和 JavaScript。 Apache Cordova 是一个项目 Apache 软件基金会 (ASF)。
我使用 Cordova 开发了一个应用程序,它可以在 iOS 上按预期运行,当签名的应用程序从 Android Studio 直接部署到三星 S6 时,它可以在 Android 上运行。
但是,当从 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 设置存在问题。
有人可以解释为什么从应用商店下载应用时这不起作用吗?
【问题讨论】:
-
您应该能够使用 Chrome 远程调试器的 JavaScript 控制台获得更详细的错误消息,CSP 错误往往非常详细,因此我建议您在远程调试器上运行应用程序并查看发生在 JS 控制台中。这可能会阐明问题所在,因此我们可以提出修复建议。 developer.chrome.com/devtools/docs/remote-debugging
-
@SimonPrickett 我确实使用 Chrome 远程调试器。正如我所说,签名的应用程序在通过 USB 从 Android Studio 部署到设备时有效,但从应用商店下载时无效。
-
你想要修复还是解释?
-
当应用从 Android Studio 部署时可以工作,但从 Play 商店下载时不能工作,这通常是服务器证书问题,当应用在 Play 商店时它具有 debugable 标志设置为 false 并且不允许某些它认为不安全的证书(证书本身或您用来签署它的根证书)
-
@JesseMonroy650 如果您有解决办法,请告诉我。
标签: android cordova cordova-plugins cordova-3 osrm