Cordova-plugin-firebase: Error en la segunda compilación

Creado en 29 jun. 2016  ·  22Comentarios  ·  Fuente: arnesson/cordova-plugin-firebase

Hola,
¡Gracias por este proyecto y su gran trabajo!

Tengo un problema en el proyecto iónico.
Primero, agrego la cadena en mi config.xml:
<plugin name="cordova-plugin-firebase" spec="https://github.com/arnesson/cordova-plugin-firebase" />
En segundo lugar, puse google-services.json (que obtuve de la consola web de firebase) en el directorio raíz.
Ejecuto mi compilación y esto 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

Pero mi segunda construcción siempre falla ...

$ 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

Estaba intentando instalar el complemento por cordova plugin add https://github.com/arnesson/cordova-plugin-firebase.git --save . Pero en este caso, incluso la primera compilación falla con Error: Invalid data, chunk must be a string or buffer, not object

Y cuando inicio la aplicación de Android con la primera compilación, el siguiente código no me funciona:

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 devuelve ["Token", "nulo"] a la consola.

Gracias de antemano.

Todos 22 comentarios

¿Obtienes engaños o valores extraños en las plataformas / andoid / res / values ​​/ strings.xml?

intente ejecutar cordova prepare android antes de compilar (aunque debería funcionar sin él)

El mismo problema aquí. En strings.xml tengo:

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

Elimine google_app_id de string.xml y vuelva a intentarlo. Lo he eliminado y me está funcionando.

¿Qué tal ios? ¿Tienes alguna idea?

No. No tengo ni idea de iOS. Creo que necesita agregar el archivo GoogleService-Info.plist en el proyecto iOS e instalar Pod.
Para ti, ¿ha comenzado a funcionar en Android ahora?

No, recibo un error: datos no válidos cuando intento emularlos. Supongo que el gancho de preparación de cordova está cambiando el archivo de nuevo.

Pero estoy más interesado en hacerlo funcionar en iOS. En ios tengo un problema de compilación: https://github.com/arnesson/cordova-plugin-firebase/issues/11

@raducostea : te sugiero que uses APN (Notificación de inserción de Apple). Aquí está el enlace del complemento: https://github.com/phonegap-build/PushPlugin. Me está funcionando con mucha precisión en iOS.

@ dhruv270 ya lo estoy usando. Quiero que este complemento para la parte de análisis registre eventos y los agregue dentro de Google Analytics.

Error: aparecieron google-services.json y googleService-info.plist en la carpeta de plataformas, si la carpeta de plataformas y json, plist no existen, muestra un error.
Lo arreglé agregando la carpeta de plataformas y json, archivo plist. Perdón por mi mal ingles

Sí, necesitas crear un proyecto en firebase console. Y agregue la aplicación en ese proyecto agregando su nombre de paquete de aplicación / ID de paquete. Obtendrá google-services.json para Android y GoogleService-Info.plist para iOS. Ese archivo debe agregarlo a su proyecto.

asegúrese de poner los archivos en la RAÍZ de su proyecto, junto con config.xml, etc., no en, por ejemplo, plataformas o www.

@raducostea @ dhruv270 Con respecto a APN y push, sugeriría usar este complemento para eso también. PushPlugin eventualmente también cambiará a Firebase FCM (ya que GCM está obsoleto). FCM usa APN para IOS, por lo que es lo mismo, pero obtienes el beneficio de una interfaz común en todas las plataformas.

Ya hice eso, pero recibo errores de compilación. Consulte https://github.com/arnesson/cordova-plugin-firebase/issues/11

No tengo engaños ni valores extraños en strings.xml.
Reinstalé cordova-plugin-firebase e hice "cordova prepare". Después de eso, vi nuevos valores en strings.xml:

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

Y cuando vuelvo a generar el mismo error:
Error: datos no válidos, el fragmento debe ser una cadena o búfer, no un objeto

¿Ha agregado la plataforma iOS y Android?

Una vez que construyo Android, recibí este error

** EXCEPCIÓN INESPERADA DE NIVEL SUPERIOR:
com.android.dex.DexException: varios archivos dex definen Lcom / google / firebase / FirebaseException;
en com.android.dx.merge.DexMerger.readSortableTypes (DexMerger.java:579)
en com.android.dx.merge.DexMerger.getSortedTypes (DexMerger.java:535)
en com.android.dx.merge.DexMerger.mergeClassDefs (DexMerger.java:517)
en com.android.dx.merge.DexMerger.mergeDexes (DexMerger.java:164)
en com.android.dx.merge.DexMerger.merge (DexMerger.java:188)
en com.android.dx.command.dexer.Main.mergeLibraryDexBuffers (Main.java:504)
en com.android.dx.command.dexer.Main.runMonoDex (Main.java:334)
en com.android.dx.command.dexer.Main.run (Main.java:277)
en com.android.dx.command.dexer.Main.main (Main.java:245)
en com.android.dx.command.Main.main (Main.java:106)

FALLIDO**

Tengo el mismo problema que @neosekar . ¿Algunas ideas?

EDITAR:

Encontré más sobre esto en Internet:

Parece que alcanzamos el límite de recuento de métodos debido a las grandes dependencias. Intentaré encontrar una solución.

EDITAR 2:

Lo arreglé haciendo lo siguiente:

  • Elimine la línea 5,6,7 de /plugins/cordova-plugin-firebase/src/android/build.gradle
  • Elimine la línea 1 de /plugins/cordova-plugin-firebase/src/android/build-extras.gradle
  • Eliminar la carpeta / plataformas / android
  • Agregar plataforma (plataforma cordova agregar android)
  • Construir / Ejecutar (cordova ejecutar android --dispositivo)

Sin embargo, creo que esto solo funciona cuando ya tienes los 'com.google.gms.google-services' instalados por otro complemento.

Con respecto a varios archivos dex, defina Lcom / google / firebase / FirebaseException:

Esto es causado por dependencias duplicadas, probablemente otro complemento que también usa com.google. gms: google-services , Firebase SDK o partes de él. No lo he probado yo mismo, pero debería poder enumerar todas las dependencias utilizadas en su proyecto y encontrar los duplicados:
http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies

Tener un GoogleService-Info.plist cuando no hay una plataforma ios provocará el "segundo error de compilación". Recomendaría que GoogleService-Info.plist se copie solo si existe la plataforma / ios ...

Puede parchear after_prepare.js para solucionar este problema, aunque todavía no he probado mi parche. Lo publicare si funciona

@ st8st8 El problema ya está solucionado (en la versión git)

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

Me encontré con el mismo problema en este momento y, después de un tiempo, volví a descargar los archivos GoogleService-Info.plist y google-services.json y funcionó bien.

Me enfrento al mismo problema con ionic. Soluciono eso eliminando la plataforma y el complemento, luego agrego nuevamente la plataforma y el complemento, luego todo vuelve a ser completamente normal.
Para este problema en ionic 2 escribo este tutorial .

Reinstalar cordova-plugin-firebase funcionó para mí

¿Fue útil esta página
0 / 5 - 0 calificaciones