Fonctionnement de firebase

P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
Bonjour,

J'aimerais votre avis sur la manière la plus appropriée pour authentifier les membres de mon application. A ce jour, j'utilise une base de données MYSQL distante et une API REST mais je me renseigne sur FIREBASE qui propose un service d'authentification mais je n'y comprends pas grand chose.

Quand la personne va s'inscrire, les données du membre (email/mot de passe) vont aller où ??? Elles sont stockés par firebase sur un serveur à distance ??? Mon problème est que si on part de cette idée là comment je fais moi pour identifier mes membres sur mon serveur mysql car je gère un jeu et j'ai besoin de savoir que c'est le membre qui a l'email [email protected] qui vient de se connecter. Est-ce que firebase retournerait un identifiant unique à la création et que donc je pourrais créer sur mon mysql un nouveau membre avec un id interne (autoincrement) et l'identifiant du membre sur firebase ?

Je suis un peu perdu sur le mode de fonctionnement de firebase comme vous pouvez le voir. Je compte utiliser leur système de notification push qui il me semble nécessite d'utiliser aussi leur système d'authentification mais je ne suis pas sûr

D'ailleurs j'aimerais présenté mon application à des joueurs pour leur demander leur avis et des améliorations éventuelles qu'ils aimeraient, vous ne savez pas où je pourrais trouver ces personnes la ?

Merci par avance
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Salut,

de ce que j'ai compris, tu n'as pas besoin de Firebase, tu as déjà ta base, surtout si au final c'est pour la recréer de ton coté.
Pour les notification, tu peux utiliser OneSignal, qui fonctionne très bien.
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
onesignal je viens de regarder là, c'est bien 100 % GRATUIT ??? Je vois unlimited for mobile donc on peut envoyer autant de notifications qu'on veut gratuitement sur les mobiles de nos membres ? Si c'est oui c'est cool déja :) Par contre, comment ça fonctionne si par exemple j'ai script php/mysql qui est lancé ou une tache cron sur mon serveur en php qui veut envoyer des push à certains membres, comment on identifie un membre pour lui envoyer une notification sur son téléphone ?
Concernant firebase je peux encore l'utiliser ce n'est pas un souci je n'ai pas lancé mon application. J'ai une base de données mysql qui gère tout, une table user et toutes les autres tables avec les participations aux jeux type loterie, détail des gains, etc... Le service authentication de firebase m'intéressait bien car il est annoncé comme très sécurisé mais dans ce cas précis la gestion de mes membres est externalisé non ? C'est google qui stocke les emails et les mots de passe de tous mes membres alors que j'ai besoin de pouvoir envoyer des emails à tous mes membres avec un script php donc mes emails doivent être accessible idéalement dans mon mysql
 
Dernière édition:
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
OneSignal, oui gratuit pour les notifications push, une API est disponible pour l'envoi via votre script.
Pour envoyer à un seul utilisateur il vous faudra récupérer son ID, mais, de mémoire, l'ayant déjà utilisé, je n'avait pas rencontrer de difficultés.

Vous pouvez aussi mettre vos users dans votre bdd Firebase et aller l'explorer avec votre script php.
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
la bdd firebase n'est pas gratuite il me semble, elle devient payante à partir d'un certain volume non ? Après le souci c'est que je ne comprends pas comment fonctionne une notification push. Si je veux lancer une notification à mes membres pour leur dire par exemple "tirage du loto à 20 h ce jour gros jackpot ce soir", comment onesignal va pouvoir envoyer ce message à tous mes membres. Si on envoie un message sur un telephone mobile, c'est comme du texto ? Ou ça peut utiliser le réseau internet et comment onesignal va pouvoir identifier un telephone
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Lorsqu'une personne va ouvrir ton application, cela va créer directement un nouveau user coté OneSignal, ensuite, tu créés une seule notification, qui sera envoyée à toutes les personnes ayant l'application (en utilisant internet, donc si un personne n'a pas sa wifi ou 4g activé, elle n'aura rien, mais la recevra dès qu'elle aura accès).
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
Merci pour tes précieuses informations :) ok donc si j'ai bien tout compris quand une personne créé un compte sur mon application je lui créé aussi un compte onesignal (un nouveau user onesignal) je dois donc je suppose rattacher l'identifiant du user onesignal à mon utilisateur créé dans ma base mysql. Ensuite je suppose aussi que je peux avec php et mysql utiliser une api chez eux pour envoyer une notification à un membre gagnant (genre je fais un tirage de loto je peux envoyer une notification à tous les gagnants en passant l'identifiant onesignal et le message à transmettre. Tu as déja réalisé une application avec un espace membre du coup ???
Si oui tu utilisais quoi comme langage ? Moi je suis sur flutter et je galère un peu car on ne trouve que des explications en anglais mais en français c'est quasi impossible

EDIT : je viens de m'inscrire sur ONESIGNAL et je vois qu'ils utilisent FIREBASE PUSH NOTIFICATIONS ??? Du coup je suis perdu là, pourquoi utiliser ONESIGNAL alors qu'on peut utiliser FIREBASE NOTIFICATION directement
 
Dernière édition:
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Le user est automatiquement ajouté dans OneSignal. Mais oui il faut lier les deux.
Oui tu peux utiliser leur API pour envoyer les notifications.

J'ai déjà utiliser OneSignal avec du Ionic, pas de Flutter.

Il ne me semblait pas que OneSignal utilisait Firebase (ou je me trompe).
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
OK :) Alors je me suis renseigné aussi de mon côté et 2 comparatifs incitent à utiliser onesignal plutôt que firebase qui serait moins complet, moins documenté et moins performant. Donc je vais essayer d'utiliser comme tu me l'as conseillé onesignal. Sur onesignal je n'ai pas compris pourquoi ils demandent de donner un firebase server key et un firebase sender ID (pour android)
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Donc ça utilise bien Firebase, OneSignal en a besoin pour justement envoyer les notifications sur les téls android.
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
Par contre, maintenant que j'ai bien tout créé et adapté j'aimerais comprendre comment il faut faire pour enregistrer un telephone au service onesignal et récupérer l'identifiant unique pour le mettre dans ma base
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Au lancement de l'application, le téléphone apparait automatiquement dans OneSignal.
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
en lançant juste la fonction Init ? Donc si le téléphone n'est pas enregistré ça le créé tout seul ?
ok et comment je récupère l'identifiant du telephone sur onesignal pour le rattacher au compte joueur dans ma base. Car je dois pouvoir envoyer une notification à un joueur spécifiquement et je dois donc connaître son identifiant sur onesignal il me semble
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Oui, il se rajoute direct.
Il te faut l'associer au moment ou il ouvre l'appli, afin de savoir quel ID correspond quel joueur.

Pour envoyer à un seul utilisateur, regarde ce doc, ça peux t'aider :
Petit paragraphe à ce sujet :
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !

Le comment :
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
Je viens de mettre dans mon main.dart ça, tu en penses quoi ? :
Et après je vais appeler cette fonction comment ?

Future<void> initPlatformState() async {
if (!mounted) return;



var settings = {
OSiOSSettings.autoPrompt: false,
OSiOSSettings.promptBeforeOpeningPushUrl: true
};


// NOTE: Replace with your own app ID from
S'il vous plaît, Connexion ou S'inscrire pour voir le contenu ou les urls !

await OneSignal.shared
.init("6387f006-d4a7-42a8-ac8d-50e5a2b70fc7", iOSSettings: settings);

OneSignal.shared
.setInFocusDisplayType(OSNotificationDisplayType.notification);
}
 
Dernière édition:
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Cette fonction doit être appelé au démarrage de l'appli, donc dans l'init (je ne sais pas comment ça fonctionne avec Flutter).
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
Dans flutter c'est main.dart qui est appelé au départ de l'application
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
Là j'utilise l'api avec php dont le code est ci-dessous mais je ne comprends pas tout. Où je passe le message de la notification ?

$url="https://onesignal.com/api/v1/notifications";
$app_id="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$array_player=array();
$restKey="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

function sendMessage(){
$content = array(
"en" => 'English Message'
);

$fields = array(
'app_id' => $app_id,
'include_player_ids' => $array_player,
'data' => array("foo" => "bar"),
'contents' => $content
);

$fields = json_encode($fields);
print("\nJSON sent:\n");
print($fields);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8','Authorization: Basic '.$restKey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

$response = curl_exec($ch);
curl_close($ch);

return $response;
}

$response = sendMessage();
$return["allresponses"] = $response;
$return = json_encode($return);

print("\n\nJSON received:\n");
print($return);
print("\n");
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Le message va dans ta variable $content, à la place du actuel "English Message".
 
P

pas30

Membre
Inscrit
18 Juillet 2020
Messages
13
Points
1
Bon j'ai réussi à envoyer une notification en php à un player id ça fonctionne sur l'émulateur. Egalement quand j'ouvre l'application cela enregistre bien un nouveau player dans onesignal. Désormais soit je récupère le player id quand je me connecte et je stocke dans ma bdd cet id en le rattachant au compte membre soit il est possible d'attribuer un external id sur onesignal et à ce moment là on va rattacher le player id à l'id du membre sur notre bdd mais dans ce cas c'est onesignal qui stocke le lien, il suffira alors de lancer une notification à un user en indiquant simplement notre numéro interne de joueur et onesignal ayant rattaché le player id à cet id là cela revient au même que de transmettre le player id. Je ne sais pas si je suis clair dans mon explication. As-tu fait ce genre de chose ? Et si oui quelle solution as-tu choisi entre les 2 ?
 
Valentin

Valentin

Moderateur Global
Inscrit
20 Février 2013
Messages
10 975
Points
48
Tant mieux si tu as réussi.

Je pense que pour stocker l'ID, inutile de le faire à chaque ouverture de l'application, juste la première suffit.
Je n'ai jamais fait ce genre de chose, mais la deuxième me parait la plus simple, non ?
 

Haut Bas