Cordova-plugin-firebase: Ошибка при второй сборке

Созданный на 29 июн. 2016  ·  22Комментарии  ·  Источник: arnesson/cordova-plugin-firebase

Привет,
Спасибо за этот проект и за отличную работу!

У меня проблема в проекте ionic.
Сначала я добавляю строку в свой config.xml:
<plugin name="cordova-plugin-firebase" spec="https://github.com/arnesson/cordova-plugin-firebase" />
Во-вторых, я помещаю google-services.json (который я получил из веб-консоли firebase) в корневой каталог.
Я запускаю свою сборку, и это работает:

$ cordova run android
Running command: /home/user/android-app/App/hooks/after_prepare/010_add_platform_class.js /home/user/android-app/App
add to body class: platform-android
**Discovered plugin "cordova-plugin-firebase" in config.xml. Adding it to the project**
Fetching plugin "https://github.com/arnesson/cordova-plugin-firebase" via git clone
Repository "https://github.com/arnesson/cordova-plugin-firebase" checked out to git ref "master".
Installing "cordova-plugin-firebase" for android
ANDROID_HOME=/home/user/Android/Sdk/
JAVA_HOME=/opt/java/jdk1.8.0_92
No target specified, deploying to device 'F9AZCY31J032'.
:preBuild UP-TO-DATE

Но моя вторая сборка всегда терпит неудачу ...

$ cordova run android
Running command: /home/user/android-app/App/hooks/after_prepare/010_add_platform_class.js /home/user/android-app/App
add to body class: platform-android
Error: Invalid data, chunk must be a string or buffer, not object

Я пытался установить плагин с помощью cordova plugin add https://github.com/arnesson/cordova-plugin-firebase.git --save . Но в этом случае даже первая сборка вылетает с Error: Invalid data, chunk must be a string or buffer, not object

И когда я запускаю приложение для Android с первой сборкой, код ниже у меня не работает:

angular.module('app', ['ionic', 'app.controllers', 'app.routes', 'app.services', 'app.directives', 'firebase'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);
    }
    if (window.StatusBar) {
      // org.apache.cordova.statusbar required
      StatusBar.styleDefault();
    }

    window.FirebasePlugin.getInstanceId(function(token) {
      // save this server-side and use it to push notifications to this device
      console.log("Token", token);
    }, function(error) {
      console.error(error);
    });

  });
})

Этот код возвращает ["Token", "null"] в консоль.

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

Все 22 Комментарий

есть ли у вас дубликаты или странные значения в платформах / andoid / res / values ​​/ strings.xml?

попробуйте запустить кордову, подготовьте андроид перед сборкой (хотя он должен работать и без него)

Здесь та же проблема. В strings.xml у меня есть:

    <string name="google_app_id">727247059290</string>
    <string name="google_app_id">@string/google_app_id</string>
    <string name="google_api_key">@string/google_api_key</string>

Удалите google_app_id из string.xml и повторите попытку. Я удалил, и он у меня работает.

Как насчет ios? у тебя есть идеи?

Неа. Я не имею ни малейшего представления об iOS. Я думаю, вам нужно добавить файл GoogleService-Info.plist в проект iOS и установить Pod.
Для вас он сейчас работает в Android?

Нет, я получаю сообщение об ошибке: недопустимые данные, когда пытаюсь имитировать это. Я предполагаю, что крючок подготовки кордовы меняет файл обратно.

Но меня больше интересует, чтобы он работал на ios. В ios у меня проблема со сборкой: https://github.com/arnesson/cordova-plugin-firebase/issues/11

@raducostea - Предлагаю вам использовать APN (Apple Push Notification). Вот ссылка на плагин: https://github.com/phonegap-build/PushPlugin. У меня это работает очень точно в iOS.

@ dhruv270 Я уже этим пользуюсь. Я хочу, чтобы этот плагин для аналитической части записывал события и добавлял их в Google Analytics.

Ошибка: неверные данные появились из -за копирования google-services.json и googleService-info.plist в папку платформ, если папка платформ и json, plist не существует, отображается ошибка.
Я исправил, добавив папку платформ и файл json, plist. Извините за мой плохой английский

Да, вам нужно создать проект на консоли firebase. И добавьте приложение в этот проект, добавив имя пакета вашего приложения / идентификатор пакета. Вы получите google-services.json для Android и GoogleService-Info.plist для iOS. Этот файл вам нужно добавить в свой проект.

убедитесь, что вы поместили файлы в ROOT вашего проекта вместе с config.xml и т. д., а не, например, в платформы или www.

@raducostea @ dhruv270 Что касается APN и push, я бы посоветовал использовать этот плагин и для этого. PushPlugin в конечном итоге также переключится на Firebase FCM (поскольку GCM устарел). FCM использует APN для IOS, так что это то же самое, но вы получаете преимущество общего интерфейса для всех платформ.

Уже сделал это, но получаю ошибки компиляции. Проверьте https://github.com/arnesson/cordova-plugin-firebase/issues/11

У меня нет никаких дубликатов или странных значений в strings.xml.
Я переустановил cordova-plugin-firebase и сделал "cordova prepare". После этого я увидел новые значения в strings.xml:

<string name="google_app_id">@string/google_app_id</string>
<string name="google_api_key">@string/google_api_key</string>

И когда я снова создаю ту же ошибку:
Ошибка: недопустимые данные, фрагмент должен быть строкой или буфером, а не объектом

Вы добавили платформу ios и android?

После сборки Android я получил эту ошибку

** НЕОЖИДАННОЕ ИСКЛЮЧЕНИЕ НА ВЕРХНЕМ УРОВНЕ:
com.android.dex.DexException: несколько файлов dex определяют Lcom / google / firebase / FirebaseException;
в com.android.dx.merge.DexMerger.readSortableTypes (DexMerger.java:579)
в com.android.dx.merge.DexMerger.getSortedTypes (DexMerger.java:535)
в com.android.dx.merge.DexMerger.mergeClassDefs (DexMerger.java:517)
в com.android.dx.merge.DexMerger.mergeDexes (DexMerger.java:164)
в com.android.dx.merge.DexMerger.merge (DexMerger.java:188)
в com.android.dx.command.dexer.Main.mergeLibraryDexBuffers (Main.java:504)
в com.android.dx.command.dexer.Main.runMonoDex (Main.java:334)
в com.android.dx.command.dexer.Main.run (Main.java:277)
в com.android.dx.command.dexer.Main.main (Main.java:245)
в com.android.dx.command.Main.main (Main.java:106)

НЕ УДАЛОСЬ**

У меня та же проблема, что и у @neosekar . Любые идеи?

РЕДАКТИРОВАТЬ:

Подробнее об этом в Интернете:

Похоже, мы достигли предела количества методов из-за больших зависимостей. Я постараюсь найти исправление.

РЕДАКТИРОВАТЬ 2:

Я исправил это, выполнив следующие действия:

  • Удалите строку 5,6,7 из /plugins/cordova-plugin-firebase/src/android/build.gradle
  • Удалите строку 1 из /plugins/cordova-plugin-firebase/src/android/build-extras.gradle
  • Удалить папку / platform / android
  • Добавить платформу (платформа cordova добавить android)
  • Сборка / запуск (cordova run android --device)

Однако я думаю, что это работает только тогда, когда у вас уже есть com.google.gms.google-services, установленный другим плагином.

Что касается нескольких файлов dex, определите Lcom / google / firebase / FirebaseException:

Это вызвано дублированием зависимостей, скорее всего, другим плагином, который также использует com.google. gms: google-services , Firebase SDK или его части. Я сам не тестировал это, но вы должны иметь возможность перечислить все зависимости, используемые в вашем проекте, и найти дубликаты:
http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies

Наличие GoogleService-Info.plist при отсутствии платформы ios вызовет «вторую ошибку сборки». Я бы рекомендовал скопировать GoogleService-Info.plist, только если существует платформа / iOS ....

Вы можете исправить after_prepare.js, чтобы обойти эту проблему, хотя я еще не тестировал свой патч. Я выложу если сработает

@ st8st8 Проблема уже исправлена ​​(на версии git)

...
if(fileExists("GoogleService-Info.plist") && directoryExists("platforms/ios/")){
...

Я столкнулся с той же проблемой только сейчас, а через некоторое время просто повторно загрузил файлы GoogleService-Info.plist и google-services.json, и все заработало нормально.

У меня такая же проблема с ionic. Я исправляю это, удаляя платформу и плагин, затем снова добавляю платформу и плагин, после чего все снова становится полностью нормальным.
Для этой проблемы в ionic 2 я пишу этот учебник .

У меня сработала переустановка cordova-plugin-firebase

Была ли эта страница полезной?
0 / 5 - 0 рейтинги