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é :
- Positionner google-services.json à la base de l’arborescence du Zip que l’on transmet à Phonegap Build
- Positionner GoogleService-Info.plist à la base de l’arborescence du Zip que l’on transmet à Phonegap Build
- 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 :
- Réaliser les actions mentionnées ci-dessus
- 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 🙂
Merci 😉
Merci beaucoup !!
Votre tuto m’a vraiment beaucoup aidé pour intégrer Firebase à mon app sous PhoneGap.
J’ai juste eu un problème pour trouver quel étaient les paramètres qui correspondaient à « YOUR_GOOGLE_FIREBASE_ID » et « YOUR_GOOGLE_FIREBASE_KEY ». En fait, on les trouve dans le fichier google-services.json:
– « YOUR_GOOGLE_FIREBASE_ID » correspond à la valeur du paramètre « mobilesdk_app_id » dans le fichier google-services.json
– « YOUR_GOOGLE_FIREBASE_KEY » correspond à la valeur du paramètre « current_key » dans le fichier google-services.json
Thanks !
Super, merci, ça fait plaisir !
Rebonjour !
Et pour aller un peu plus loin, je cherche actuellement à faire remonter sur Firebase le tracking des clicks sur un bouton de mon app (PhoneGap) si possible sans utiliser BigQuery. Pourriez-vous m’indiquer un tuto ou un lien pour le code à intégrer dans l’app et le paramétrage dans Firebase ? La doc Google n’a pas l’air très claire à ce sujet.
Merci d’avance !
Bonjour,
A priori, on n’a rien sous le coude.
Du coup, à l’inverse, quand vous aurez trouvé, n’hésitez pas à poster sur notre blog.
Stéphane,
Bonjour,
Je cherche a envoyer de notification via mon application.
j’ai installer votre plugin sur mon appli et tout fonction sur Android.
Cependant, sur Ios, je rencontre un problème: le Tolkien n’est pas en bon format(FCM alors que je cherche a le récupérer en APNS)
j’ ai essayer d’installer https://github.com/chemerisuk/cordova-plugin-firebase-messaging mais quand je fais met test , mon programme ne trouve pas cordova-plugin-firebase:
if ( device.ios() || device.ipad() || device.ipod() || device.iphone() ){
alert(‘devie ios’);
if (!cordova.plugins) alert(« pas de cordova.plugins »);
else if (!cordova.plugins.firebase) alert(« pas de cordova.plugins.firebase »);
else if (!cordova.plugins.firebase.messaging) alert(« pas de cordova.plugins.firebase.messaging »);
else {
if (!cordova.plugins.firebase.messaging.requestPermission) alert(« pas de cordova.plugins.firebase.messaging.requestPermission »);
if (!cordova.plugins.firebase.messaging.getToken) alert(« pas de cordova.plugins.firebase.messaging.getToken »);
else alert(‘plugin 1 présent, ok!’);
}
Est ce que les plugin sont compatibles?
Sinon existe t’il un moyen avec votre plugin de récupérer le token en format APNS?
Bonjour, malheureusement, nous n’avons pas rencontré ce type de problème et n’avons pas de piste à proposer.
Peut être qu’un autre lecteur en aura 🙂
Hummmm dommage.
On pense que le problème vient des token mais on est pas sur… on reçoit bien le token avec la méthode getToken() mais au moment de l envoie de la notification, on a l’erreur:
InvalidApnsCredential
Pourtant la clé a bien été créée et télécharger sur firebase au format .p8
Et quand on lance la notification depuis la console Firebase, aucun message d erreur mais la notification na arrive pas sur ios