Cordova-plugin-firebase: Erro na segunda construção

Criado em 29 jun. 2016  ·  22Comentários  ·  Fonte: arnesson/cordova-plugin-firebase

Olá,
Obrigado por este projeto e seu ótimo trabalho!

Tenho problemas no projeto iônico.
Primeiro, adiciono a string em meu config.xml:
<plugin name="cordova-plugin-firebase" spec="https://github.com/arnesson/cordova-plugin-firebase" />
Em segundo lugar, coloquei google-services.json (que obtive do console da web do firebase) no diretório raiz.
Eu executo minha construção, e isso funciona:

$ 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

Mas minha segunda construção sempre falha ...

$ 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

Eu estava tentando instalar o plugin de cordova plugin add https://github.com/arnesson/cordova-plugin-firebase.git --save . Mas, neste caso, mesmo a primeira compilação trava com Error: Invalid data, chunk must be a string or buffer, not object

E quando eu inicio o aplicativo Android com a primeira compilação, o código abaixo não funciona para mim:

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);
    });

  });
})

Este código retorna ["Token", "null"] para o console.

Agradeço antecipadamente.

Todos 22 comentários

você obtém algum valor bobo ou estranho em plataformas / andoid / res / values ​​/ strings.xml?

tente executar cordova prepare android antes de construir (embora deva funcionar sem ele)

O mesmo problema aqui. Em strings.xml eu tenho:

    <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>

Remova google_app_id de string.xml e tente novamente. Eu removi e está funcionando para mim.

Que tal ios? você tem alguma ideia?

Não. Não tenho ideia de iOS. Acho que você precisa adicionar o arquivo GoogleService-Info.plist no projeto iOS e instalar o Pod.
Para você, já começou a funcionar no Android?

Não, estou recebendo o Erro: dados inválidos quando tento emulá-los. Eu acho que o gancho de preparação de cordova está mudando o arquivo de volta.

Mas estou mais interessado em fazê-lo funcionar no iOS. No iOS, tenho um problema de compilação: https://github.com/arnesson/cordova-plugin-firebase/issues/11

@raducostea - Eu sugiro que você use APN (Apple Push Notification). Aqui está o link do plugin: https://github.com/phonegap-build/PushPlugin. Está funcionando com muita precisão para mim no iOS.

@ dhruv270 já estou usando isso. Eu quero este plugin para a parte analítica para registrar eventos e adicioná-los dentro do google analytics.

Erro: dados inválidos apareceram por causa da cópia google-services.json e googleService-info.plist para a pasta de plataformas, se a pasta de plataformas e json, plist não existir mostra erro.
Consertei adicionando a pasta de plataformas e o arquivo json, plist. Desculpe pelo meu ingles ruim

Sim, você precisa criar um projeto no console do firebase. E adicione o aplicativo a esse projeto adicionando o nome do pacote do aplicativo / id do pacote. Você obterá google-services.json para Android e GoogleService-Info.plist para iOS. Esse arquivo você precisa adicionar em seu projeto.

certifique-se de colocar os arquivos no ROOT de seu projeto, junto com config.xml etc, e não em plataformas ou www.

@raducostea @ dhruv270 Com relação ao APN e push, eu sugeriria usar este plugin também para isso. O PushPlugin também mudará para o Firebase FCM (já que o GCM está obsoleto). O FCM usa APN para IOS, então é a mesma coisa, mas você obtém o benefício de uma interface comum em todas as plataformas

Já fiz isso, mas estou recebendo erros de compilação. Verifique https://github.com/arnesson/cordova-plugin-firebase/issues/11

Não tenho nenhum idiota ou valores estranhos em strings.xml.
Reinstalei o cordova-plugin-firebase e fiz "cordova prepare". Depois disso, comecei a ver novos valores em strings.xml:

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

E quando eu construir o mesmo erro novamente:
Erro: dados inválidos, o fragmento deve ser uma string ou buffer, não um objeto

Você adicionou plataforma iOS e Android?

Depois de construir o Android, recebo este erro

** EXCEÇÃO INESPERADA DE NÍVEL SUPERIOR:
com.android.dex.DexException: Vários arquivos dex definem Lcom / google / firebase / FirebaseException;
em com.android.dx.merge.DexMerger.readSortableTypes (DexMerger.java:579)
em com.android.dx.merge.DexMerger.getSortedTypes (DexMerger.java:535)
em com.android.dx.merge.DexMerger.mergeClassDefs (DexMerger.java:517)
em com.android.dx.merge.DexMerger.mergeDexes (DexMerger.java:164)
em com.android.dx.merge.DexMerger.merge (DexMerger.java:188)
em com.android.dx.command.dexer.Main.mergeLibraryDexBuffers (Main.java:504)
em com.android.dx.command.dexer.Main.runMonoDex (Main.java:334)
em com.android.dx.command.dexer.Main.run (Main.java:277)
em com.android.dx.command.dexer.Main.main (Main.java:245)
em com.android.dx.command.Main.main (Main.java:106)

FRACASSADO**

Eu tenho o mesmo problema que @neosekar . Alguma ideia?

EDITAR:

Encontrei mais sobre isso na internet:

Parece que atingimos o limite de contagem de métodos devido às grandes dependências. Vou tentar encontrar uma solução.

EDIT 2:

Eu consertei fazendo o seguinte:

  • Remova a linha 5,6,7 de /plugins/cordova-plugin-firebase/src/android/build.gradle
  • Remova a linha 1 de /plugins/cordova-plugin-firebase/src/android/build-extras.gradle
  • Remover / plataformas / pasta android
  • Adicionar plataforma (plataforma cordova add android)
  • Construir / Executar (cordova run android --device)

No entanto, acho que isso só funciona quando você já tem o 'com.google.gms.google-services' instalado por outro plug-in.

Em relação a vários arquivos dex, defina Lcom / google / firebase / FirebaseException:

Isso é causado por dependências duplicadas, provavelmente outro plug-in que também está usando com.google. gms: google-services , Firebase SDK ou partes dele. Eu não testei isso, mas você deve ser capaz de listar todas as dependências usadas em seu projeto e encontrar as duplicatas:
http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies

Ter um GoogleService-Info.plist quando não há plataforma ios causará o "segundo erro de compilação". Recomendo que GoogleService-Info.plist seja copiado apenas se houver plataforma / ios ....

Você pode corrigir after_prepare.js para contornar isso, embora eu não tenha testado meu patch ainda. Vou postar se funcionar

@ st8st8 O problema já foi corrigido (na versão git)

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

Eu me deparei com o mesmo problema agora e depois de um tempo, baixei novamente os arquivos GoogleService-Info.plist e google-services.json e funcionou perfeitamente.

Estou enfrentando o mesmo problema com iônico. Eu corrijo isso removendo a plataforma e o plug-in e, em seguida, adicionando novamente a plataforma e o plug-in, então tudo está completamente normal novamente.
Para este problema no ionic 2, escrevo este tutorial .

Reinstalar cordova-plugin-firebase funcionou para mim

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

michaelreiser picture michaelreiser  ·  5Comentários

stephan-nordnes-eriksen picture stephan-nordnes-eriksen  ·  5Comentários

jdla1990 picture jdla1990  ·  4Comentários

JonSmart picture JonSmart  ·  3Comentários

danielpalen picture danielpalen  ·  5Comentários