Cordova выполняет плагины только после возобновления события

Я использую Cordova 3.5.0 на iOS.

Мое приложение загружается, запускается событие 'deviceReady', но никакие действия плагина не выполняются, пока я не переведу свое приложение в фоновый режим (перейдя на домашний экран).

Когда я возвращаюсь в свое приложение, обработчик «возобновления» запускается, журналы отображаются в LLDB, а плагин PushNotification начинает прослушивать события и пытается зарегистрировать push-уведомления.

Почему это происходит только после того, как я перевел приложение в спящий режим?

Это установленные плагины (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"

Заранее спасибо.


person tschoffelen    schedule 28.07.2014    source источник
comment
Привет - у меня та же проблема, что и у тебя. Он работает на Android, но не на iOS. Даже оповещения не срабатывают до тех пор, пока приложение не будет переведено в спящий режим, а затем возобновлено. Вы поняли, что происходит? Большое спасибо.   -  person SammyBlackBaron    schedule 05.08.2014
comment
Нет, я до сих пор не понимаю, почему это происходит...   -  person tschoffelen    schedule 05.08.2014
comment
Вы когда-нибудь работали над этим?   -  person Marty.H    schedule 21.09.2015


Ответы (2)


У меня была такая же проблема в моем собственном приложении с 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:

Кажется, это необходимо для правильного выполнения кода плагина Cordova на iOS. Но мне все еще кажется странным, что на политику влияет возобновление работы приложения.

Дополнительное примечание: похоже, проблема затрагивает все плагины, которые отображаются вне веб-просмотра. У меня это было с кордовой-плагином-камерой, телефонным плагином-сканером штрих-кодов, кордовой-плагином-диалогами. Другие плагины, такие как cordova-plugin-file-transfer, работали нормально.

person MrJingles87    schedule 14.02.2017
comment
работая над небольшим телефонным проектом, в котором использовалась строка состояния, она просто не отображалась при первом запуске приложения, но при возобновлении отображалась. этот CSP исправил это. - person Terry Kernan; 06.12.2019

Том, хотя на самом деле это не ответ, поскольку я не уверен, что это исправило, я могу подтвердить, что мое приложение больше этого не делает. Вот что я сделал:

Кордова изменена на использование 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.

person SammyBlackBaron    schedule 05.08.2014