cordova.plugins дает неопределенное значение

Я компилирую приложение ionic-cordova, используя сервис Phonegap Build. При тестировании приложения на реальном устройстве (и через некоторые сообщения журнала отладки) я получаю как cordova.plugins, так и window.cordova.plugins undefined. Как ни странно, когда я компилирую приложение локально (используя Android SDK) и запускаю его на своем устройстве, оно работает нормально. Проблема возникает только с Phonegap Build. Я сравнил config.xml, и они похожи. Вот мой config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.ionicframework.reader491854" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <preference name="loglevel" value="DEBUG" />
    <preference name="AndroidLaunchMode" value="singleTop" />
    <feature name="App">
        <param name="android-package" value="org.apache.cordova.App" />
    </feature>
    <feature name="Device">
        <param name="android-package" value="org.apache.cordova.device.Device" />
    </feature>
    <feature name="File">
        <param name="android-package" value="org.apache.cordova.file.FileUtils" />
        <param name="onload" value="true" />
    </feature>
    <feature name="FileTransfer">
        <param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
    </feature>
    <feature name="Clipboard">
        <param name="android-package" value="com.verso.cordova.clipboard.Clipboard" />
    </feature>
    <feature name="SocialSharing">
        <param name="android-package" value="nl.xservices.plugins.SocialSharing" />
    </feature>
    <feature name="Toast">
        <param name="android-package" value="nl.xservices.plugins.Toast" />
    </feature>
    <feature name="InAppBrowser">
        <param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser" />
    </feature>
    <feature name="TTS">
        <param name="android-package" value="org.apache.cordova.plugin.TTS" />
    </feature>
    <feature name="Zip">
        <param name="android-package" value="org.apache.cordova.Zip" />
    </feature>
    <name>Test Reader</name>
    <description>
        Description here
    </description>
    <author email="hi@ionicframework" href="http://ionicframework.com/">
        Author name
    </author>
    <content src="index.html" />
    <access origin="*" />
    <preference name="webviewbounce" value="false" />
    <preference name="UIWebViewBounce" value="false" />
    <preference name="DisallowOverscroll" value="true" />
    <preference name="BackupWebStorage" value="none" />
    <preference name="Fullscreen" value="true" />
    <feature name="StatusBar">
        <param name="ios-package" onload="true" value="CDVStatusBar" />
    </feature>
    <feature name="NetworkStatus">
        <param name="android-package" value="org.apache.cordova.networkinformation.NetworkManager" />
        <param name="android-package" value="org.apache.cordova.NetworkManager" />
    </feature>
    <feature name="Keyboard">
        <param name="android-package" value="com.ionic.keyboard.IonicKeyboard" />
        <param name="onload" value="true" />
        <param name="ios-package" onload="true" value="IonicKeyboard" />
    </feature>
    <icon src="www/img/logo.png" />
</widget>

Любая помощь, пожалуйста?


person Ayman Abdel-Rahman    schedule 08.03.2015    source источник
comment
Когда вы используете window.cordova.plugins, я не могу быть установлен, даже если устройство готово к работе. Вот ссылка, которая указывает на аналогичную проблему: stackoverflow.com/questions/5180918/   -  person Blauharley    schedule 08.03.2015


Ответы (1)


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

1) Пространство имен корневого тега в конфигурации для сборки phonegap должно быть следующим: xmlns:gap="http://phonegap.com/ns/1.0"

2) Phonegap Build не использует плагины таким образом, только Phonegap CLI. Мое тестирование проводилось локально с использованием SDK, и все мои плагины были настоящими классами в папке платформы Android. Чтобы использовать Phonegap Build, вы не отправляете свои плагины с исходным кодом, а выбираете нужные вам плагины из центрального репозитория (на самом деле их два). Это: https://build.phonegap.com/plugins и http://plugins.cordova.io/ . Конечно, мне пришлось вернуться и проверить каждый из моих плагинов, есть ли они в этих репозиториях. Если нет, то я должен был найти альтернативу. Итак, теперь мой новый config.xml выглядит так:

<widget xmlns="http://www.w3.org/ns/widgets" xmlns:gap="http://phonegap.com/ns/1.0"
        id="package.id" version="1.1.1">
    <name>Name</name>
    <description>
        Description here
    </description>
    <author email="[email protected]" href="http://www.domain.com">
        Author Name
    </author>
    <content src="index.html"/>
    <access origin="*"/>
    <icon src="icon.png"/>

    <preference name="webviewbounce" value="false"/>
    <preference name="UIWebViewBounce" value="false"/>
    <preference name="DisallowOverscroll" value="true"/>
    <preference name="BackupWebStorage" value="none"/>
    <preference name="Fullscreen" value="true"/>
    <preference name="AndroidLaunchMode" value="singleTop"/>

    <gap:plugin name="org.apache.cordova.device" />
    <gap:plugin name="org.apache.cordova.file" />
    <gap:plugin name="org.apache.cordova.file-transfer" />
    <gap:plugin name="org.apache.cordova.network-information" />
    <gap:plugin name="org.apache.cordova.inappbrowser" />

    <gap:plugin name="org.apache.cordova.statusbar" version="0.1.4" source="pgb"/>
    <gap:plugin name="com.ionic.keyboard" version="1.0.3" source="pgb"/>
    <gap:plugin name="com.verso.cordova.clipboard" version="0.1.0" source="pgb"/>
    <gap:plugin name="nl.x-services.plugins.socialsharing" version="4.3.8" source="pgb"/>
    <gap:plugin name="nl.x-services.plugins.toast" version="2.0.2" source="pgb"/>
    <gap:plugin name="com.wordsbaking.cordova.tts" version="0.2.1" source="plugins.cordova.io"/>
</widget>

3) Поскольку плагин «device» не был включен должным образом, событие «deviceready» не срабатывало. Я не ждал этого события должным образом, и когда я исправил плагин, он так и не сработал, что подводит нас к следующему пункту.

4) Это было самым сложным и заняло несколько часов. deviceready иногда срабатывал, иногда нет. Это было решено путем включения скрипта в файл index.html последним. Я не знаю причину, особенно в том, что в документах Cordova упоминается, что прослушиватель deviceready ведет себя по-другому, так что обратный вызов будет вызываться немедленно, если событие уже было запущено до добавления прослушивателя. Во всяком случае, это решило трюк.

Удачи!

person Ayman Abdel-Rahman    schedule 09.03.2015