Ionic 2 ошибка cordova недоступна

Я пытаюсь использовать плагин Google плагин cordova в новом проекте ionic 2 (последняя версия ionic2), но я всегда сталкиваюсь с ошибками в отношении кордовы. Плагин правильно установлен и отображается в папке плагина.

Один из моих попыток:

import { GooglePlus } from "ionic-native";

а затем

GooglePlus.login().then(...)

Метод входа выполняет, но всегда выдает сообщение об ошибке "cordova_not_available"

Я хочу протестировать приложение с помощью ionic serve в моей системе Windows, прежде чем развертывать его на своем телефоне Android. Как я могу сделать кордову доступной на сервере localhost? Из поиска я понимаю, что cordova.js генерируется и всегда включается в пакет развертывания для устройства.

Другой подход, который я пробовал, заключается в использовании

window.plugins.googleplus.login(...)

Но этот подход не проходит через компилятор typescript, который ничего не знает о свойстве plugins на объекте windows.

Как я могу это исправить?

Ответ 1

Если вы хотите, чтобы плагин работал в браузере, вы должны добавить platform browser и запустить его:

ionic cordova platform add browser

и запустите его:

ionic cordova run browser

вместо ionic serve.

Ответ 2

Эта ошибка обычно возникает, когда вы запускаете приложение в chrome с помощью ionic serve, что нормально, так как в корневой среде браузера собственные компоненты отсутствуют, но также встречаются на эмуляторе и устройствах, когда используется ионный родной плагин, который вы используете был добавлен кивок, даже если вы добавили для него ионный плагин.

Например, если вы с использованием собственного тоста

то вам нужно добавить соответствующие ионные зависимости:

ionic plugin add cordova-plugin-x-toast --save

но вам также необходимо добавить зависимости от кордовы:

cordova plugin add cordova-plugin-x-toast --save

Если вы забудете добавить более поздний плагин cordova, вы получите сообщение об ошибке:

Runtime Error Uncaught(in promise): cordova_not_available

Что может быть сложно найти причину.

После того, как вы добавили ионные и кордовые зависимости, вы сможете использовать его.

Убедитесь, что вы импортируете его:

import { Toast } from 'ionic-native';

add Платформа в конструкторе:

constructor(public navCtrl: NavController, private platform: Platform) {...

затем используйте собственный элемент:

this.platform.ready().then(() =>
      Toast.show("Successfull", '5000', 'center')
        .subscribe(
        toast => {
          console.log(toast);
        }
      ));

Ответ 3

Использование ionic serve отключает все плагины Cordova, потому что он не работает на устройстве.

Скорее используйте ionic cordova run android Это запустит эмулятор андроида, который должен позволить всем плагинам cordova функционировать

Я также сталкивался со вторым подходом, но синтаксис должен быть таким: windows['plugins'].googleplus.login(...)

Ответ 4

Просто запустите после подключения устройства Android

ionic cordova run android

убедитесь, что вы исправили ключ карты Google

Ответ 5

Иногда использование ionic cordova run не лучший вариант, так как компиляция ваших изменений занимает много времени.

В моем случае причиной была проблема с плагином FCM. Он не может работать в браузере, если я использую ионную подачу. Поскольку мой код был внутри app.component.ts, мне было легко обойти эту проблему. Я просто использовал следующую строку:

  if (platform.is('cordova')) 
     {  this.fcmx.onTokenRefresh().subscribe(token => { 
     this.pushNoti.storeNewToken(token); }); }

Используя platform.is('cordova'), вы можете предотвратить код, вызывающий проблемы с запуском в браузере.