Cordova-plugin-firebase: Erreur sur le deuxième build

Créé le 29 juin 2016  ·  22Commentaires  ·  Source: arnesson/cordova-plugin-firebase

Bonjour,
Merci pour ce projet et votre excellent travail !

J'ai un problème dans le projet ionique.
Tout d'abord, j'ajoute la chaîne dans mon config.xml :
<plugin name="cordova-plugin-firebase" spec="https://github.com/arnesson/cordova-plugin-firebase" />
Deuxièmement, j'ai mis google-services.json (que j'ai obtenu de la console Web Firebase) dans le répertoire racine.
Je lance mon build, et ça marche :

$ 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

Mais mon deuxième build échoue toujours...

$ 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

J'essayais d'installer le plugin par cordova plugin add https://github.com/arnesson/cordova-plugin-firebase.git --save . Mais dans ce cas, même le premier build plante avec Error: Invalid data, chunk must be a string or buffer, not object

Et lorsque je démarre l'application Android avec la première version, le code ci-dessous ne fonctionne pas pour moi :

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

  });
})

Ce code renvoie ["Token", "null"] à la console.

Merci d'avance.

Tous les 22 commentaires

obtenez-vous des dupes ou des valeurs étranges dans platform/andoid/res/values/strings.xml ?

essayez d'exécuter cordova préparer android avant de construire (même si cela devrait fonctionner sans lui)

Même problème ici. Dans strings.xml j'ai :

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

Supprimez google_app_id de string.xml et réessayez. J'ai supprimé et cela fonctionne pour moi.

Et ios ? avez-vous une idée?

Non. Je n'ai aucune idée pour iOS. Je pense que vous devez ajouter le fichier GoogleService-Info.plist dans le projet iOS et installer Pod.
Pour vous, est-ce qu'il a commencé à fonctionner sous Android maintenant ?

Non, je reçois une erreur : des données invalides lorsque j'essaie de les émuler. Je suppose que le crochet de préparation de cordova est en train de changer le fichier.

Mais je suis plus intéressé à le faire fonctionner dans ios. Dans ios, j'ai un problème de construction : https://github.com/arnesson/cordova-plugin-firebase/issues/11

@raducostea - Je vous suggère d'utiliser APN (Apple Push Notification). Voici le lien du plugin : https://github.com/phonegap-build/PushPlugin. Cela fonctionne très précisément pour moi dans iOS.

@ dhruv270 je l'utilise déjà. Je veux que ce plugin pour la partie analytique enregistre les événements et les ajoute dans Google Analytics.

Erreur : des données non valides sont apparues à cause de la copie de google-services.json et googleService-info.plist dans le dossier des plates-formes , si le dossier des plates-formes et json, plist n'existe pas, une erreur s'affiche.
J'ai corrigé en ajoutant le dossier platform et json , le fichier plist. Désolé pour mon mauvais anglais

Oui, vous devez créer un projet sur la console firebase. Et ajoutez une application dans ce projet en ajoutant le nom de votre package d'application / votre identifiant de package. Vous obtiendrez google-services.json pour Android et GoogleService-Info.plist pour iOS. Ce fichier que vous devez ajouter dans votre projet.

assurez-vous de mettre les fichiers dans la RACINE de votre projet, à côté de config.xml, etc., pas dans, par exemple, des plates-formes ou www.

@raducostea @dhruv270 En

Je l'ai déjà fait mais j'obtiens des erreurs de compilation. Vérifiez https://github.com/arnesson/cordova-plugin-firebase/issues/11

Je n'ai pas de dupes ou de valeurs étranges dans strings.xml.
J'ai réinstallé cordova-plugin-firebase et fait "cordova prepare". Après cela, je voyais de nouvelles valeurs dans strings.xml :

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

Et quand je reconstruis la même erreur :
Erreur : données non valides, le morceau doit être une chaîne ou un tampon, pas un objet

Êtes-vous ajouté à la fois à la plate-forme iOS et Android ?

Une fois que j'ai construit Android, j'ai eu cette erreur

**EXCEPTION INATTENDUE DE HAUT NIVEAU :
com.android.dex.DexException : plusieurs fichiers dex définissent Lcom/google/firebase/FirebaseException ;
sur com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:579)
sur com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:535)
sur com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:517)
sur com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:164)
à com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
sur com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
sur com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
sur com.android.dx.command.dexer.Main.run(Main.java:277)
sur com.android.dx.command.dexer.Main.main(Main.java:245)
sur com.android.dx.command.Main.main(Main.java:106)

MANQUÉ**

J'ai le même problème que @neosekar . Des idées?

ÉDITER:

Plus d'informations à ce sujet sur Internet :

Il semble que nous ayons atteint la limite de nombre de méthodes en raison des grandes dépendances. Je vais essayer de trouver une solution.

EDIT 2:

Je l'ai corrigé en procédant comme suit :

  • Supprimer la ligne 5,6,7 de /plugins/cordova-plugin-firebase/src/android/build.gradle
  • Supprimer la ligne 1 de /plugins/cordova-plugin-firebase/src/android/build-extras.gradle
  • Supprimer le dossier /plateformes/android
  • Ajouter une plate-forme (plate-forme Cordova ajouter Android)
  • Construire/exécuter (cordova exécuter android --device)

Cependant, je pense que cela ne fonctionne que lorsque vous avez déjà installé 'com.google.gms.google-services' par un autre plugin.

Concernant les fichiers dex multiples, définissez Lcom/google/firebase/FirebaseException :

Cela est dû à des dépendances en double, probablement un autre plugin qui utilise également com.google. gms:google-services , Firebase SDK ou des parties de celui-ci. Je n'ai pas testé cela moi-même mais vous devriez pouvoir répertorier toutes les dépendances utilisées dans votre projet et trouver les doublons :
http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies

Avoir un GoogleService-Info.plist lorsqu'il n'y a pas de plate-forme ios provoquera la "deuxième erreur de construction". Je recommanderais que GoogleService-Info.plist ne soit copié que si la plate-forme/ios existe....

Vous pouvez patcher after_prepare.js pour contourner ce problème, même si je n'ai pas encore testé mon patch. je le posterai si ca marche

@st8st8 Le problème est déjà résolu (sur la version git)

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

Je suis tombé sur le même problème tout à l'heure et après un certain temps, j'ai retéléchargé les fichiers GoogleService-Info.plist et google-services.json et cela a très bien fonctionné.

Je suis confronté au même problème avec Ionic. Je corrige cela en supprimant la plate-forme et le plug-in, puis en ajoutant à nouveau la plate-forme et le plug-in, puis tout est à nouveau complètement normal.
Pour ce numéro dans ionic 2, j'écris ce tutoriel .

La réinstallation de cordova-plugin-firebase a fonctionné pour moi

Cette page vous a été utile?
0 / 5 - 0 notes