Skip to content

wxFirebase SDK est un composant conçu pour faciliter l’intégration des API de Firebase.

License

Notifications You must be signed in to change notification settings

fabnguess/wxFirebaseSDK

Repository files navigation

Logo wxFirebase

wxFirebaseSDK

Une bibliothèque destinée aux développeurs utilisant les produits PCSoft, facilitant l'intégration des services Firebase dans vos projets Windev, WebDev, et Windev Mobile. Ce SDK se concentre sur l'interaction via les API REST de Firebase, sans nécessiter l'utilisation du SDK Firebase natif. Les services supportés incluent :

  • 🔒 Authentification
  • 📂 Firestore
  • 🗄️ Storage

Prérequis

Installation

  1. Téléchargez la dernière version de wxFirebase dans la page de Releases de ce projet.
  2. Ajoutez le composant à votre projet WINDEV® en suivant la documentation officielle.

Configuration projet

Pour que le composant puisse accéder à un projet Firebase, vous devez au préalable le configurer en générant un fichier de clé privée dans la console Firebase.

Étapes pour générer le fichier de clé privée :

  1. Ouvrez cette page de la console Firebase et sélectionnez le projet pour lequel vous souhaitez générer un fichier de clé privée.
  2. Cliquez sur Générer une nouvelle clé privée, puis confirmez en cliquant sur Générer la clé.

Une fois le fichier de clé privée obtenu, initialisez la configuration Firebase dans votre projet avec le code suivant :

sAPIKey		est une chaîne	= INILit("FIREBASECONFIG", "API_KEY"	   , "", fRepExe() + fSep() + "firebaseConfig.INI")
sStorageBucket	est une chaîne	= INILit("FIREBASECONFIG", "STORAGE_BUCKET", "", fRepExe() + fSep() + "firebaseConfig.INI")
sPojetID	est une chaîne	= INILit("FIREBASECONFIG", "PROJET_ID"	   , "", fRepExe() + fSep() + "firebaseConfig.INI")

// Approche 1 : Initialisation par tableau
gstFirebaseConfig est STFirebaseConfig	= [sAPIKey, sPojetID, sStorageBucket]

// Approche 2 : Initialisation explicite par membres 
gstFirebaseConfig.sApiKey        = sAPIKey
gstFirebaseConfig.sProjetId      = sPojetID
gstFirebaseConfig.sStorageBucket = sStorageBucket

// Création de l'instance Firebase
gclInstanceFirebase est CFireBase(gstFirebaseConfig)

Note

Dans cette documentation, nous partirons du principe que tous vos paramètres de configuration sont stockés dans un fichier .INI.

Paramètres :

  • sApiKey : La clé API Web de votre projet Firebase (chaine).
  • sProjetId : L'dentifiant du projet Firebase (chaine).
  • sStorageBucket : L'URL du bucket de stockage du projet Firebase (chaine).

I - Authentification

L’authentification permet aux utilisateurs de s'authentifier via les API REST de Firebase. Cette fonctionnalité peut inclure la connexion par email et mot de passe, l'inscription de nouveaux utilisateurs.

Initialisation du service d'authentification

gclAuth	est CAuth = gclInstanceFirebase.Auth()

Chacune des méthodes du service d'authentification documentées ci-dessous renverra une instance de CAuthReponse avec les accesseurs suivants :

accesseurs Type description
gclAuthReponse.errType ETypeErreur Determine qu'une erreur est presente ou pas.
gclAuthReponse.Données Buffer Retourne les informations utilisateur
gclAuthReponse.errEmailExistant Booleen L'adresse e-mail fournie est déjà utilisée par un utilisateur.
gclAuthReponse.errEmailIntrouvable Booleen Il n'existe aucun utilisateur correspondant à cet identifiant. L'utilisateur a peut-être été supprimé.
gclAuthReponse.errMotDePasseInvalide Booleen La valeur fournie pour la propriété utilisateur password n'est pas valide. Il doit s'agir d'une chaîne d'au moins six caractères.
gclAuthReponse.errUtilisateurDesactivé Booleen Le compte utilisateur a été désactivé par un administrateur.
gclAuthReponse.errConnexionParMotDePasseDesactive Booleen La connexion par mot de passe est désactivée pour ce projet.
gclAuthReponse.errConnexionAnonymeDesactive Booleen La connexion anonyme est désactivée pour ce projet.
gclAuthReponse.errWindevMessage Chaine Retourne le message d'erreur wwindev correspondant.
gclAuthReponse.errTokenInvalide Booleen Identifiant de l'utilisateur ne sont plus valides. L'utilisateur doit se reconnecter.
gclAuthReponse.errTokenProviderExpire Booleen Identifiant d'authentification fournies sont mal formées ou ont expiré

Note

ETypeErreur est une enumeration comprenant trois valeurs :

  • errAucune : Aucune erreur n'as ete detectée.
  • errFirebase : Une erreur Firebase à été detectée.
  • errWindev : Une erreur Windev à été detectée.

Créer un utilisateur

gstInfoUtilisateur est STAuthPayload

gstInfoUtilisateur.sEmail           = "wx@firebase.com"
gstInfoUtilisateur.sMdp             = "test1234"
gstInfoUtilisateur.sNomAffichage    = "wxFirebase"
gstInfoUtilisateur.sNuméroTéléphone = "+2250000000000"
gstInfoUtilisateur.sPhotoURL        = "https://lorempicture.point-sys.com/400/300/"
gstInfoUtilisateur.bVerifieEmail    = Faux

gclAuthReponse  = gclAuth.CréerUtilisateur(gstInfoUtilisateur)

Paramètres :

  • sEmail : L'adresse e-mail de l'utilisateur (chaine).
  • sMdp : Le mot de passe de l'utilisateur (chaine).
  • sNomAffichage : Le nom d'affichage de l'utilisateur (chaine).
  • sNuméroTéléphone : Le numéro de téléphone de l'utilisateur (chaine).
  • sPhotoURL : L'URL de la photo de profil de l'utilisateur (chaine).
  • bVerifieEmail : Indique si l'adresse e-mail de l'utilisateur doit être vérifiée (booléen).

Connexion anonyme

Cette méthode créera un nouvel utilisateur dans la base de données du service d'authentification Firebase à chaque fois qu'elle est invoquée

gclAuthReponse  = gclAuth.ConnexionAnonyme()

Connexion par e-mail et mot de passe

gclAuthReponse  = gclAuth.SeConnecter("wx@firebase.com", "test1234")

Paramètres :

  • sEmail : L'adresse e-mail de l'utilisateur (chaine).
  • sMdp : Le mot de passe de l'utilisateur (chaine).

Demande de réinitialisation de mot de passe

gclAuthReponse  = gclAuth.RéinitialiserMotDePasse("wx@firebase.com")

Paramètres :

  • sEmail : L'adresse e-mail de l'utilisateur (chaine).

Supprimer un utilisateur

gclAuthReponse  = gclAuth.SupprimerUtilisateur()

Connexion via providers

Les Providers sont des fournisseurs d'authentification autres que Firebase, par exemple Facebook, Github, Google ou Twitter. Vous pouvez trouver les fournisseurs d'authentification actuellement pris en charge par Firebase dans la documentation officielle de Firebase. A l'heure actuelle le composant prends en compte les fournisseurs suivants :

  • Facebook
  • Github
  • Google

1. Connexion via Facebook

stOptionProvider est STProviderOauthOptions

stOptionProvider.sClientID	 =  CONST_CLIENT_ID
stOptionProvider.sClientSecret	 =  CONST_CLIENT_SECRET
stOptionProvider.sScope		 = "email"
stOptionProvider.sURLRedirection = "http://localhost:5000/auth/facebook/callback"

gclProvider est CFacebookProvider(stOptionProvider)

gclAuthReponse  est CAuthReponse = gclAuth.SeConnecterProvider(gclProvider)
Paramètres :
  • sClientID : L'identifiant client de l'application Facebook (chaine).
  • sClientSecret : Le secret client de l'application Facebook (chaine).
  • sScope : La portée des autorisations demandées (chaine).
  • sURLRedirection : L'URL de redirection après l'authentification (chaine).
  • gclProvider : Une instance de CGoogleProvider initialisée avec les options d'authentification (STProviderOauthOptions).

2. Connexion via Github

stOptionProvider est STProviderOauthOptions

stOptionProvider.sClientID	 =  CONST_CLIENT_ID
stOptionProvider.sClientSecret	 =  CONST_CLIENT_SECRET
stOptionProvider.sScope		 = "user"
stOptionProvider.sURLRedirection = "http://localhost:5000/auth/github/callback"

gclProvider est CGithubProvider(stOptionProvider)

gclAuthReponse  est CAuthReponse = gclAuth.SeConnecterProvider(gclProvider)
Paramètres :
  • sClientID : L'identifiant client de l'application Github (chaine).
  • sClientSecret : Le secret client de l'application Github (chaine).
  • sScope : La portée des autorisations demandées (chaine).
  • sURLRedirection : L'URL de redirection après l'authentification (chaine).

3. Connexion via Google

stOptionProvider est STProviderOauthOptions

stOptionProvider.sClientID	 =  CONST_CLIENT_ID
stOptionProvider.sClientSecret	 =  CONST_CLIENT_SECRET
stOptionProvider.sScope		 = "email"
stOptionProvider.sURLRedirection = "http://localhost:5000/auth/github/callback"

gclProvider est CGoogleProvider(stOptionProvider)

gclAuthReponse  est CAuthReponse = gclAuth.SeConnecterProvider(gclProvider)
Paramètres :
  • sClientID : L'identifiant client de l'application Google (chaine).
  • sClientSecret : Le secret client de l'application Google (chaine).
  • sScope : La portée des autorisations demandées (chaine).
  • sURLRedirection : L'URL de redirection après l'authentification (chaine).

Exemple d'utilisation de CAuthReponse

gclAuthReponse est CAuthReponse = gclAuth.SeConnecter("wx@firebase.com", "test1234")

SELON gclAuthReponse.errType
	CAS errAucune
		
		gbufDonnéesUtilisateur est un Buffer = gclAuthReponse.Données
		
	CAS errFirebase
		SI gclAuthReponse.errEmailExistant ALORS Info("Email Existant")
		SI gclAuthReponse.errEmailIntrouvable ALORS Info("Email Introuvable")
		SI gclAuthReponse.errMotDePasseInvalide ALORS Info("Mot De Passe Invalide")
	
	CAS errWindev
		Info(gclAuthReponse.errWindevMessage)
FIN

II - Firestore

Firestore est une base de données NoSQL flexible et évolutive. Elle permet de stocker et de synchroniser des données pour les applications mobiles, web et serveur.

Configuration de la Sécurité

Avant de commencer, il est fortement conseillé de configurer les règles de sécurité Firestore pour protéger vos données. Voici un exemple de règles de sécurité de base :

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {

   match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

Note

Cette règle permet uniquement aux utilisateurs authentifiés de lire et d'écrire des données dans Firestore. Lien vers la documentation https://firebase.google.com/docs/firestore/security/get-started?hl=fr

Initialisation de Firestore

Pour initialiser Firestore, utilise le code suivant :

gclFireStoreDB est CFireStore = gclInstanceFirebase.FireStore()

Fonctionnalités de CFirestore

CFirestore expose la méthode Collection, qui à son tour expose les méthodes presentes dans le tableau des fonctionnalités générales suivantes :

Fonctionnalités générales

Méthode Description
Collection Accède à une collection Firestore.
Creer Ajoute un nouveau document dans une collection Firestore.
Modifier Modifie un document existant dans Firestore.
Afficher Récupère les données d'un document Firestore.
Supprimer Supprime un document spécifique de Firestore.
Lister Initialise une requête pour lister les documents d'une collection avec des options avancées.

Fonctionnalités avancées

L'accès aux fonctionnalités avancées nécessite un appel préalable à la méthode Lister :

Méthode Description
TrierPar Trie les résultats retournés selon un champ spécifique.
Filtrer Ajoute un filtre pour restreindre les documents retournés.
Limiter Limite le nombre de documents retournés par la requête.
Executer Exécute la requête construite et retourne les résultats.

Important

Toutes les methodes precedement cité retourne une intance de CFireStoreReponse

Gestion de CFireStoreReponse

La classe CFireStoreReponse encapsule les réponses de Firestore et de WinDev afin de fournir aux développeurs un ensemble de méthodes simples et cohérentes.

gclFireStoreReponse est CFireStoreReponse = gclFiretoreDB.Collection("utilisateurs").Creer(gJsonfirestoreDocument)

Description des Méthodes

Voici un aperçu des méthodes principales de CFireStoreReponse :

  • errType : Retourne une instance de ETypeErreur : errFirebase pour une erreur liée à Firestore, errWindev pour une erreur liée à WinDev, ou errAucune si aucune erreur n'est survenue.
  • Données : Retourne le résultat d'un document Firestore au format JSON.
  • errArgumentInvalide : Erreur survenant lorsque les arguments passés à la méthode sont invalides ou mal formatés.
  • errAutorisationRefusee : Erreur indiquant que l'utilisateur ou le client n'a pas les permissions nécessaires pour effectuer l'action demandée.
  • errIndisponible : Erreur signalant que le service Firestore est temporairement indisponible.
  • errNonAuthentifie : Erreur retournée lorsque l'utilisateur n'est pas authentifié ou que l'authentification a expiré.
  • errQuotaEpuisee : Erreur déclenchée lorsque le quota d'utilisation des services Firestore est atteint.
  • errServeurIndisponible : Erreur survenant lorsque le serveur Firestore ne répond pas ou est inaccessible.
  • errWindevMessage : Contient le message d'erreur détaillé lorsqu'une erreur liée à WinDev est rencontrée.
Exemple d'utilisation
SELON gclFireStoreReponse.errType
	CAS errAucune : Info(gclFireStoreReponse.Données)

	CAS errFirebase
		SI gclFireStoreReponse.errQuotaEpuisee        ALORS Info("Votre quota est épuisé.")
		SI gclFireStoreReponse.errArgumentInvalide    ALORS Info("Un ou plusieurs arguments fournis sont invalides.")
		SI gclFireStoreReponse.errIndisponible        ALORS Info("Le service Firestore est actuellement indisponible.")
		SI gclFireStoreReponse.errNonAuthentifie      ALORS Info("La requête n'est pas authentifiée.")
		SI gclFireStoreReponse.errServeurIndisponible ALORS Info("Le serveur Cloud Firestore est inaccessible.")
		SI gclFireStoreReponse.errAutorisationRefusee ALORS Info("Vous n'êtes pas autorisé à effectuer cette opération.")
		
	CAS errWindev : Info(gclFireStoreReponse.errWindevMessage)		
FIN

Exemple de JSON pour les Méthodes Creer et Modifier

Le code ci-dessous montre un exemple de document JSON qui peut être utilisé dans les méthodes Creer et Modifier :

jsonfirestoreDocument est chaîne=
	{
  "nomEnseignant": "Dr. Alice Johnson",
  "anneesExperience": 12,
  "estTitulaire": true,
  "cours": [
    {
      "nomCours": "Introduction à la Programmation",
      "coefficient": 4,
      "etudiants": [
        {
          "nom": "Jean Dupont",
          "age": 20
        },
        {
          "nom": "Marie Curie",
          "age": 22
        }
      ],
      "projets": [
        {
          "titre": "Développement d'une Application Web",
          "description": "Créer une application web simple en utilisant React.",
          "scoreMaximal": 100
        },
        {
          "titre": "Implémentation de Structures de Données",
          "description": "Implémenter des structures de données clés comme la liste chaînée et l'arbre binaire.",
          "scoreMaximal": 100
        }
      ]
    },
    {
      "nomCours": "Systèmes de Gestion de Bases de Données",
      "coefficient": 3,
      "etudiants": [
        {
          "nom": "Alice Martin",
          "age": 21
        },
        {
          "nom": "Robert Blanc",
          "age": 23
        }
      ],
      "projets": [
        {
          "titre": "Optimisation des Requêtes SQL",
          "description": "Optimiser des requêtes SQL complexes pour de meilleures performances.",
          "scoreMaximal": 100
        }
      ]
    }
  ],
  "departements": {
    "informatique": {
      "nombreEnseignants": 20,
      "responsable": "Pr. David King"
    },
    "mathematiques": {
      "nombreEnseignants": 15,
      "responsable": "Pr. Susan Clark"
    }
  }
}

Créer un document

Ajoute un nouveau document dans une collection donnée.

gclDbReponse est CFireStoreReponse = gclFirestoreDB.Collection("utilisateurs").Creer(jsonfirestoreDocument)

Paramètres :

  • sCollectionID : Nom de la collection Firestore (chaine).
  • jsonDonnees : Données du document à ajouter (json).

Note

Le paramètre sCollectionID est identique pour toutes les méthodes ci-dessous.

Modifier un document

Modifie un document existant dans Firestore.

gclDbReponse est CFireStoreReponse = gclFirestoreDB.Collection("utilisateurs").Modifier("6PBA9QuFmM6zEKSgVqRo",jsonfirestoreDocument)

Paramètres :

  • sDocumentID : Données du document à ajouter (chaine). -jsonDonnees : Identiques à la méthode Creer.

Afficher un document

Récupère les détails d'un document spécifique.

gclDbReponse est CFireStoreReponse = gclFirestoreDB.Collection("utilisateurs").Afficher("6PBA9QuFmM6zEKSgVqRo")

Paramètres :

  • sDocumentID : Données du document à ajouter (chaine).

Supprimer un document

Supprime un document existant dans Firestore.

gclDbReponse est CFireStoreReponse = gclFirestoreDB.Collection("utilisateurs").Supprimer("uGemEu6yiMMgAiKu359w")

Paramètres : Identiques à la méthode Afficher.

III - Storage

Le service Firebase Storage permet de stocker et de récupérer des fichiers de manière sécurisée et évolutive. Ce service est idéal pour gérer des fichiers tels que des images, des vidéos, des documents, et bien plus encore.

Initialisation du service de stockage

gclStorage est CStorage = gclInstanceFirebase.Storage()

Téléchargement d'un fichier

sCheminFichier est chaine = "C:/chemin_vers_le_fichier/image.png"

gclStorageReponse est CStorageReponse  = gclStorage.TéléchargerFichier(sCheminFichier)

// Gestion de CStorageReponse 
 SELON gclStorageReponse.errType
	CAS errAucune
		Info(gclStorageReponse.RécupérerUrlFichier)		
	CAS errFirebase
		SI gclAuthReponse.errAccèsRefusé ALORS Info("L'accès au fichier a été refusé en raison des règles de sécurité.")
			
	CAS errWindev
		Info(gclStorageReponse.errWindevMessage)
FIN

Paramètres :

  • sCheminFichier : Le chemin du fichier à télécharger (chaine).

Activation de la gestion des rôles

Pour garantir la sécurité de vos fichiers stockés dans Firebase Storage, il est essentiel d'activer et de configurer les règles de sécurité. Voici un exemple de règles de sécurité pour Firebase Storage :

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
        allow read, write: if request.auth !=null;
    }
  }
}

Ces règles permettent uniquement aux utilisateurs authentifiés de lire et d'écrire des fichiers dans Firebase Storage. Vous pouvez ajuster ces règles en fonction de vos besoins spécifiques.

Contributions

Les contributions sont les bienvenues ! Pour signaler un bug ou proposer des fonctionnalités, veuillez soumettre une issue ou une pull request. Plus sur comment contributer.

Contributeurs

Kouadio Fabrice Nguessan
Kouadio Fabrice Nguessan

💻 📖

License

MIT

About

wxFirebase SDK est un composant conçu pour faciliter l’intégration des API de Firebase.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published