我有一个使用phonegap构建开发的移动Web应用程序。我将其打包为一个ipa和apk文件,并且代码在浏览器中运行。我有一个对于在远程服务器上运行的功能至关重要的数据库。
我能够使用websockets连接到服务器,而在iOS设备,浏览器甚至移动浏览器中都没有问题。但是,打包的apk无法连接到服务器。
我尝试确保白名单正确,并添加了一些额外的条件,因为它代表config.xml访问,如下所示:
<access origin="*" />
<allow-navigation href="*" />
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<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中添加了一个内容策略元标记,如下所示:
<meta http-equiv="Content-Security-Policy" content="default-src *; script-src * 'unsafe-eval' 'unsafe-inline'; connect-src *; img-src *; style-src * 'unsafe-inline' ; media-src *">
似乎都没有影响这个问题。
我已经下载了android studio,并尝试使用设备和仿真器进行调试,但是该软件无法调试javascript。
我尝试使用chromes远程调试,并且可以显示设备和模拟的设备标签,但是如果我启动该应用程序,则什么也不会出现。
我将所有偏好设置和插件放在这里,以防万一可能是问题所在
<content src="index.html" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="19" />
<preference name="orientation" value="portrait" />
<preference name="fullscreen" value="true" />
<plugin name="cordova-plugin-battery-status" spec="*" />
<plugin name="cordova-plugin-console" spec="*" />
<plugin name="cordova-plugin-contacts" spec="*" />
<plugin name="cordova-plugin-device" spec="*" />
<plugin name="cordova-plugin-device-motion" spec="*" />
<plugin name="cordova-plugin-device-orientation" spec="*" />
<plugin name="cordova-plugin-dialogs" spec="*" />
<plugin name="cordova-plugin-file" spec="*" />
<plugin name="cordova-plugin-file-transfer" spec="*" />
<plugin name="cordova-plugin-globalization" spec="*" />
<plugin name="cordova-plugin-media" spec="*" />
<plugin name="cordova-plugin-network-information" spec="*" />
<plugin name="cordova-plugin-splashscreen" spec="*" />
<plugin name="cordova-plugin-vibration" spec="*" />
<plugin name="cordova-plugin-statusbar" spec="*" />
<plugin name="cordova-plugin-whitelist" spec="*" />
<gap:plugin name="pushbots-cordova-plugin" source="npm" spec="1.6.10" />
<preference name="android-build-tool" value="gradle" />
<preference name="phonegap-version" value="cli-9.0.0" />
<plugin name="cordova-plugin-inappbrowser" spec="*" />
<preference name="StatusBarOverlaysWebView" value="true" />
<preference name="StatusBarCropsWebview" value="false" />
<preference name="StatusBarStyle" value="lightcontent" />
<preference name="StatusBarBackgroundColor" value="#4169e1" />
我认为这是一个phonegap构建配置问题,因为它可以在iOS而不是android上运行。
这也可能是javascript的websocket问题?我项目的Net类首先开始,但从未达到初始化完成。这是代码:
connect()
{
var that = this;
var wsstring = "ws://" + that.host + ":" + that.port + "/" + that.frag;
that.ws = new WebSocket(wsstring);
that.ws.onopen = function()
{
that.sendMessage("hello","Hello, world");
that.heartBeat();
app.logger.setup();
console.log("Logger Activated!");
};
that.ws.onmessage = function (evt)
{
that.messageHandler.handleMessage(evt.data);
};
that.ws.onclose = function()
{
that.ws = null;
console.log("WebSocket Closed");
setTimeout(function(){ that.connect }, 1000);
}
that.ws.onerror = function (err)
{
console.error('Socket encountered error: ', err.message, 'Closing socket');
that.ws.close();
}
that.ws.closed
}
任何建议将不胜感激!