Pour un de nos clients, nous devions mettre en place Firebase qui est le système de remontées de statistiques recommandé par Google.

Mais après plusieurs  recherches, nous nous sommes rendu compte que cordova-plugin-firebase-analytics n’est pas compatible avec le système de Build Phonegap.

Voici la solution que nous avons pu mettre en place.

Le problème : Incompatible Phonegap Build

Ce plugin n’est pas compatible avec notre système de build (Phonegap Build) : build.phonegap.com

Cela se traduit par un très bon fonctionnement sur IOS mais, par contre, aucune remontée de statistiques sur Android.

La solution : Forker le plugin sur GitHub

Nous avons d’abord tenté d’installer le plugin « cordova-plugin-firebase-analytics » en respectant les différentes étapes décrites dans (cordova-plugin-firebase-analytics et surtout google-services). Ce qui donne, en résumé :

  1. Positionner google-services.json à la base de l’arborescence du Zip que l’on transmet à Phonegap Build
  2. Positionner GoogleService-Info.plist à la base de l’arborescence du Zip que l’on transmet à Phonegap Build
  3. Ajouter les quelques lignes nécessaires pour déclarer ces nouvelles ressources (https://github.com/chemerisuk/cordova-support-google-services)

<platform name="android">
<resource-file src="google-services.json" target="google-services.json" />
...
</platform>
<platform name="ios">
<resource-file src="GoogleService-Info.plist" />
...
</platform>

Après avoir tout paramétré, nous n’avions pas de remontées sur Firebase (en plus il faut facilement attendre quelques minutes pour constater ces remontées).

De multiples recherches nous ont permises de définir que cela provient des hook. Les hook ne fonctionnent pas sur Phonegap Build pour raison de sécurité.

Du coup, scripts/after_prepare.js ne sera jamais exécuté…

Ce qui nous amène à décortiquer ce fichier et à le comprendre. Son but principal est de remplacer les variables « google_app_id » et « google_api_key » par les informations qu’il va lire dans google-services.json.

Après avoir lu et décortiqué le problème, nous avons forké le plugin pour le rendre paramétrable.

Notre fork est disponible ici : https://github.com/Pliciweb/cordova-plugin-firebase

Maintenant le plugin est paramétrable et le hook n’a plus d’utilité.

Pour utiliser notre plugin, vous devez :

  1. Réaliser les actions mentionnées ci-dessus
  2. ET déclarer dans votre config.xml le plugin de cette manière

<plugin name="cordova-plugin-firebase" spec="https://github.com/Pliciweb/cordova-plugin-firebase.git">
<variable name="APP_GOOGLE_API_ID" value="YOUR_GOOGLE_FIREBASE_ID" />
<variable name="APP_GOOGLE_API_KEY" value="YOUR_GOOGLE_FIREBASE_KEY" />
</plugin>

Astuce et pense bête

Pour récupérer le token FB, il faut utiliser la fonction:
window.FirebasePlugin.getToken(function(token) {}, function(error) {});

Pour IOS, il faut aussi utiliser la fonction suivante afin de définir si nous avons les droits pour les notifications :
window.FirebasePlugin.hasPermission(function(data){});

On pourrait croire que seulement si nous n’avons pas les droits, il faut les demander via cette fonction :
window.FirebasePlugin.grantPermission();

Mais, en fait il est nécessaire de toujours réaliser ce « grantPermission » car l’utilisateur peut avoir coupé les notifications dans les paramètres du téléphone.

Et voilà 🙂 Maintenant les statistiques fonctionnent 🙂