4

我在 iOS 上使用 Cordova 3.5.0。

我的应用程序加载,“deviceReady”事件被触发,但在我将应用程序置于后台(通过转到主屏幕)之前,不会执行任何插件操作。

当我回到我的应用程序时,“恢复”处理程序被触发,日志显示在 LLDB 中,并且 PushNotification 插件开始监听事件并尝试注册推送通知。

为什么只有在我让我的应用程序进入睡眠状态后才会发生这种情况?

这些是已安装的插件 ( cordova plugins ls):

com.patrickheneise.cordova.statusbar 0.0.2 "Status Bar"
com.phonegap.plugins.PushPlugin 2.2.1 "PushPlugin"
com.phonegap.plugins.actionsheet 1.0.0 "ActionSheet"
org.apache.cordova.console 0.2.10-dev "Console"
org.apache.cordova.dialogs 0.2.9-dev "Notification"
org.apache.cordova.vibration 0.3.10-dev "Vibration"

提前致谢。

4

2 回答 2

6

我在自己的应用程序中遇到了同样的问题cordova 6.3.0。经过数十次测试,我发现了问题。

我有一个这样定义的 Content-Security-Policy 元标记:

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

事实证明default-src *是不够的。

使用以下策略,它可以工作:

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

这里的关键部分是gap:

似乎需要在 iOS 上正确执行 cordova 插件代码。但我仍然觉得奇怪的是,该政策受到恢复应用程序的影响。

附加说明:该问题似乎影响了在 web 视图之外显示的所有插件。我使用了 cordova-plugin-camera、phonegap-plugin-barcodescanner、cordova-plugin-dialogs。其他插件,如 cordova-plugin-file-transfer 工作得很好。

于 2017-02-14T12:28:23.537 回答
0

汤姆,虽然不是真正的答案,因为我不确定是什么修复了它,但我可以确认我的应用程序不再这样做。这就是我所做的:

将 cordova 更改为使用3.3.0,而不是3.4.0同时为我的插件指定版本号:

<gap:plugin name="org.apache.cordova.console" version="0.2.7" />
<gap:plugin name="org.apache.cordova.contacts" version="0.2.11" />
<gap:plugin name="org.apache.cordova.device" version="0.2.8" />
<gap:plugin name="org.apache.cordova.device-orientation" version="0.3.5" />
<gap:plugin name="org.apache.cordova.dialogs" version="0.2.6" />
<gap:plugin name="org.apache.cordova.file" version="1.0.1" />
<gap:plugin name="org.apache.cordova.file-transfer" version="0.4.2" />
<gap:plugin name="org.apache.cordova.network-information" version="0.2.7" />
<gap:plugin name="org.apache.cordova.vibration" version="0.3.7" />

然后我重新构建了我的应用程序,它在 iOS 上正常工作。所以我随后将 Cordova 升级回 3.4.0,保持插件不变,它仍然有效。

所以我不知道是因为旧的插件版本还是因为我只是降级然后升级了 Cordova,但它现在已经修复了它。

哦,仅供参考,我正在使用 Phonegap Build,这就是为什么降低/升级 Phonegap/Cordova 版本更容易的原因。

于 2014-08-05T16:28:29.993 回答