Bonjour tout le monde
Je me posais une question par rapport aux systèmes de badges (notamment présent sur l’Apple Watch par exemple).
Comment font-ils ?
Par exemple, si je vais courir avec mon AppleWatch, imaginons que c’est la première fois que je vais courir, je reçois un badge “Première course”, ensuite, si je vais courir plus de 30 minutes, je reçois un autre badge “Course 1/2 heure”, etc etc, en fonction des actions que j’accomplis. (ce sont des “badges” d’exemple, je ne connais pas les vrai de mémoire)
Je suppose qu’ils ont une base de donnée qui retient tous les badges que les utilisateurs peuvent gagner, avec les conditions pour que les badges soient gagnés, mais après ?
Dans le cas d’une activité physique par exemple, à chaque fois qu’une activité physique est terminée, ils parcourent toute la base de donnée des badges que l’utilisateur n’a pas encore en vérifiant badge par badge si l’utilisateur a bien remplit la condition de gain du badge ?
Vous avez une idée de comment c’est fait ?
C’est intéressant comme idée, les badges
Merci,
Bonne journée,
Alexandre
Hello,
Oui, j’imagine ça comme un système de conditions qui parcourt le tableau des badges et si il trouve une condition qui est réuni et que tu n’as pas déjà le badge, il te l’attribue.
Ex :
Fin de l’activité running.
Durée de l’activité running : 34min
Parcours des badges possibles
Badge potentiel trouvé : "Running"
Déjà dans la collection de badge ? Oui, je ne fais rien
Badge potentiel trouvé : Course supérieure à 30min
Déjà dans la collection de badge ? Non, je lui attribue ce badge
Un peu comme sur la communauté ici : quand tu commentes pour la première fois, que tu as ton premier j’aime, etc.
Après, je dis ça vite, y’a ptêt un meilleur moyen de le faire.
Je me rappelle de Yelp notamment qui attribuait des badges quand tu faisais un check-in dans un nouveau pays donc j’imagine qu’ils fonctionnaient de cette façon.
1 « J'aime »
Oui, en fait, je ne vois pas d’autres moyens de le faire, mais je me dis que si j’ai une collection de 200 badges par exemple, le temps de parcourir le tout, de vérifier les conditions, si le user l’a déjà ou pas (même si ça, je pense que je peux récupérer tous les badges qu’un user n’a pas, ainsi pas besoin de vérifier s’il l’a déjà ou pas), ça prends un peu de temps, non ?
Enfin, après, 200 entrées dans un tableau pour une machine, ça va vite…
Enfin, après, 200 entrées dans un tableau pour une machine, ça va vite…
Oh que oui ça va vite !
Et si tu l’appelles seulement à la fin de l’activité, ça ne consomme pas beaucoup de ressources.
Je vais m’orienté dans ce sens là alors (puis de toute façon, si j’organise ça correctement, je peux toujours changer ma méthode par la suite)
Merci,
Bonjour,
Moi je partirai plus vers cette façon :
- Créer une liste de constantes (“ACTIVITE_PREMIERE”, “ACTIVITE_30_MINUTES”)
- Créer une fonction qui reçoit une de ces constantes et s’occupe de l’ajouter dans ta base de données
Ainsi dès qu’une action est accomplie t’appelles ta fonction. Cette dernière recherche si le badge a déjà été attribué et dans le cas contraire l’ajoute.
Exemple à la fin d’une activité :
- Attribuer le badge “Première course”
- Si l’activité a duré plus de 30 minutes alors attribuer le badge “Activité de plus de 30 minutes”
@edroche
C’est une autre solution, mais je vois des inconvénients dans ce cas là.
Je m’explique:
Si j’ai plusieurs utilisateurs sur le même Device (donc qui n’ont pas spécialement reçu les même badges), ta méthodes va fonctionner aussi, mais dans la DB il va y avoir des doublons.
Tandis que si on ajoute tous les badges direct en DB, on va juste indiquer des relations, sans doublon de texte (surtout si je mets une description pour mes badges, une image, etc).
En plus, si je souhaite ajouter un badge dans mon app, je vais devoir aller l’ajouter dans la liste de constante et je vais devoir faire les vérifications dans le code, alors que si je la mets en DB, je sais faire une fonction automatique pour tester tous mes badges, sans devoir chipoter dans le code.
A moins que j’ai mal compris ton idée?
Si tu as plusieurs utilisateur alors dans la table badge de ta base de données il suffit de mettre :
- L’ID de l’utilisateur
- La valeur de ta constante
Dans ta fonction d’ajout dans la base de données tu recherches si le badge existe pour l’utilisateur en cours.
Ensuite pour identifier ton badge il te faudra une liste de constante (qui te sers d’identifiant) dans les deux solutions.
Oui il faudra modifier le code pour déclencher l’obtention du badge au moment de l’action mais tu auras juste à rajouter une ligne.
Cette façon de faire permettra d’ajouter un badge plus facilement si cela concerne autre chose que des activités sportives. Exemple d’un badge “Ajout d’un ami” il faudra non plus comparé une activité mais la liste des amis. Je sais pas si tu vois ou je veux en venir.
Dans tous les cas il faudra que tu penses à ajouter une fonction qui à chaque mise à jour de ton application ailles rechercher des nouveaux badges (que tu aurais rajouté) et que ton utilisateur aurait déjà débloqué.
Effectivement, vu comme ça, pour des ajouts de badges autres que pour des actions physiques, c’est vrai que je vais devoir le faire autrement.
En fait, je devrais quasiment déclencher la vérification de badge à chaque action où l’utilisateur a possibilité d’en gagner un…
Merci pour ce point de vue qui va très certainement me servir
Je confirme que ça va très vite. Pour exemple je fais plein de requête successives sur un en base de donnée realm de 200.000 lignes sans problème.