L’application Classement est officiellement obsolète depuis le 20 décembre 2024. Cette modification ne concerne pas les applications existantes qui utilisent l’API Achievements.
This is a Platform SDK feature requiring Data Use Checkup
Pour utiliser cette fonctionnalité ou toute autre fonctionnalité du SDK Platform, vous devez effectuer un contrôle de l’utilisation des données (CUD). Le CUD assure la conformité avec les Politiques développeur·se. Il appartient à un·e admin de votre équipe de certifier que l’usage que vous faites des données des utilisateur·ices est conforme aux règles de la plateforme. Jusqu’à ce que l’équipe de révision examine et approuve votre CUD, les fonctionnalités de la plateforme ne sont disponibles que pour les utilisateur·ices test.
Apps for children can't use Platform SDK features
Si vous auto-certifiez votre application comme étant principalement réservée aux enfants de moins de 13 ans, évitez alors d’utiliser les fonctionnalités du SDK Platform. Cette restriction assure la conformité avec les règles relatives à l’âge des utilisateurs et utilisatrices. Pour garantir le respect de ces règles, le contrôle de l’utilisation des données de votre application est désactivé.
Créez des trophées, des badges, des récompenses et plus encore pour inciter vos utilisateur·ices à atteindre des objectifs. Ils peuvent voir les succès obtenus par leurs ami·es, créant ainsi une émulation. Vous pouvez également afficher les succès obtenus dans votre application sur la page d’accueil Meta Quest pour montrer la progression dans un jeu. Ce guide vous explique comment définir des succès globaux, utiliser les méthodes SDK et les appels serveur à serveur pour interagir avec le service de succès, et vous propose un exemple d’implémentation Unity à consulter.
La plateforme Meta Horizon gère le suivi des succès. Elle affiche une notification toast et joue un son lorsqu’un succès est débloqué. Votre application gère les déclencheurs, les mises à jour et l’affichage des succès pour l’utilisateur ou l’utilisatrice.
Créer des succès
Pour ajouter des succès à votre jeu, commencez par les définir et déterminer comment les débloquer. Suivez ces étapes pour créer un succès :
Sélectionnez Create Achievement (Créer un succès) et renseignez les informations suivantes :
API Name (Nom de l’API) : chaîne unique pour référencer le succès dans votre application. Attention, le nom est sensible à la casse et doit correspondre exactement à celui utilisé dans votre code.
Localization and Manage Languages (Localisation et gestion des langues) : (Facultatif) localisez le succès dans plusieurs langues. Sélectionnez Manage Languages (Gérer les langues), choisissez les langues souhaitées et saisissez les informations correspondantes. L’affichage dépendra des paramètres régionaux de l’appareil de l’utilisateur ou de l’utilisatrice.
User Data Warning
N’utilisez aucune information personnelle identifiable.
Title (Titre) : nom court et descriptif visible par l’utilisateur·ice.
Description : description complète du succès, incluant éventuellement comment le débloquer ou l’obtenir.
Unlocked Description (Optional) (Description débloquée (Facultatif) : remplace la description initiale une fois le succès débloqué.
Locked and Unlocked Icons (Optional) (Icônes verrouillée et déverrouillée (Facultatif)) : icônes associées au succès. L’icône verrouillée s’affiche pour les personnes n’ayant pas obtenu le succès, l’icône déverrouillée pour celles l’ayant obtenu. Si vous ne fournissez qu’une icône déverrouillée, nous utiliserons une version en niveaux de gris comme icône verrouillée. Sans icône, nous utiliserons une icône par défaut.
Write Policy (Politique d’écriture) : choisissez l’une des deux options :
Client Authoritative (par défaut) : l’application cliente peut écrire ou débloquer la progression du succès.
Server Authoritative : seules les API S2S peuvent écrire ou mettre à jour le succès, généralement pour réduire la triche lors de sessions de jeu gérées par des serveurs de confiance. L’application cliente peut toujours consulter les informations et la progression.
Is Achievement Secret (Le succès est-il secret) : choisissez Oui/Non pour masquer ou non le titre, la description, l’icône et la progression jusqu’au déblocage complet du succès. Non par défaut.
Type : Meta Quest prend en charge trois types de succès, chacun avec un mécanisme de déblocage différent :
Simple : succès de type tout ou rien. Ils se débloquent par un évènement unique ou l’achèvement d’un objectif précis. Par exemple, un succès simple est débloqué lorsque le ou la joueur·se atteint le haut de la montagne.
Compteur : succès débloqués lorsqu’un compteur atteint une cible définie. Vous devez définir la cible à atteindre qui déclenchera le succès. Par exemple, un succès de type Compteur avec une cible de 10 sera en cours de déblocage lorsqu’un·e joueur·se vainc 3 zombies (c’est-à-dire tout nombre inférieur à 10) et sera débloqué lorsque le ou la joueur·se aura vaincu 10 zombies.
Champs de bits : succès débloqués lorsqu’un nombre cible de bits dans un champ de bits est défini. Vous devez définir la cible et la longueur du champ de bits qui déclenchent le succès. Par exemple, un succès de type champ de bits avec une cible de 5 est en cours de déblocage lorsque bitfield_progress est « 000110 » et sera complètement débloqué lorsque bitfield_progress atteindra « 111110 ».
Sélectionnez Publish (Publier) pour enregistrer le succès. Vous pourrez le mettre à jour à tout moment dans le Tableau de bord développeur(se).
Remarque : l’archivage des succès est possible à tout moment. Cette action ne supprime ni le succès ni les progrès des joueurs et joueuses, mais les rend simplement invisibles. En désarchivant un succès, vous rétablissez sa visibilité ainsi que celle des progrès associés pour l’ensemble des utilisateurs et des utilisatrices.
Intégrer des succès
Après avoir créé vos succès dans le tableau de bord des développeurs comme décrit ci-dessus, vous pouvez les intégrer dans Unreal en utilisant des nœuds Meta Quest dans votre Blueprint de jeu. Voici les points à prendre en compte :
Convertir correctement les valeurs
Les succès Unreal Engine s’échelonnent de 0 à 100, et vous devez donc convertir vos valeurs dans cette échelle. Le tableau ci-dessous fournit quelques exemples de la procédure à suivre.
Type de succès
Conversion vers Unreal
Exemple
Simple
Bloqué : 0 - Débloqué : 100
Aucune
Compteur
Nombre actuel * 100 / la valeur cible (la valeur maximale est de 100)
Succès avec une cible de 10. Lorsqu’un·e utilisateur·ice possède un décompte de 5, le calcul à effectuer est le suivant : 5 * 100 / 10 = 50 dans Unreal.
Champ de bits
Nombre de « 1 » dans la chaîne * 100 / la valeur cible (la valeur maximale est de 100)
Succès pour lequel 4 bits sur 6 doivent être définis. Lorsqu’un·e utilisateur·ice possède 3 bits (000111), le calcul à effectuer est le suivant : 3 * 100 / 4 = 75 dans Unreal.
Récupérer et mettre en cache les valeurs
Au démarrage de l’application, vous devez ajouter les descriptions des succès mis en cache, puis mettre en cache les succès dans votre Blueprint, dans cet ordre. Procédez à cette opération avant d’effectuer un appel pour récupérer ou écrire des informations de succès. Pour récupérer la progression des succès d’un·e joueur·se dans votre application, procédez comme suit :
Dans votre Blueprint, ajoutez l’action Get Cached Achievement Description (Obtenir la description des succès mis en cache), accessible dans le menu contextuel Actions du Blueprint sous Online > Achievements (En ligne > Succès), pour récupérer les informations concernant un succès spécifique, y compris son type.
Ensuite, ajoutez Get Cached Achievement Progress (Obtenir la progression des succès mis en cache) pour récupérer la progression de cet·te utilisateur·ice.
Convertissez la valeur renvoyée au format approprié pour la présenter à l’utilisateur·ice.
Écrire la progression des succès
Pour écrire la progression des succès d’un·e joueur·se dans votre application, procédez comme suit :
Dans votre Blueprint, ajoutez Get Cached Achievement Description (Obtenir la description des succès mis en cache) pour récupérer les informations concernant un succès spécifique, y compris son type.
Ensuite, ajoutez Write Achievement Progress (Écrire la progression des succès) pour écrire la progression de cet·te utilisateur·ice. Lorsque vous écrivez la progression, convertissez-la comme suit :
Simple : débloquez lorsque cet élément est appelé avec une valeur quelconque.
Compteur : ajoutez la valeur de WriteObject à la progression des succès. Seules les valeurs Int32, Int64, UInt32 et UInt64 sont prises en charge.
Champ de bits : utilisez une série de 0 et 1 pour le masque de bits. Les valeurs Int32 seront converties en leur représentation de chaîne : 101 → 101. Les valeurs de chaîne seront utilisées telles qu’elles ont été transmises.
Requêtes REST pour les succès côté serveur
Pour les succès définis comme Server Authoritative, vous devrez effectuer des appels d’API depuis votre serveur de confiance vers le service Meta Quest afin d’incrémenter et de débloquer les succès. Pour plus d’informations sur l’interaction avec les API REST de Meta Quest, consultez la page relative aux principes de base des appels de serveur à serveur.
Créer ou mettre à jour un succès (POST)
Cette méthode permet de créer un nouveau succès ou de mettre à jour un succès existant. La mise à jour s’appliquera à tous les utilisateur·ices.
Méthode/URL de requête :
POST https://graph.oculus.com/$APPID/achievement_definitions
Paramètres :
Paramètre
Obligatoire/facultatif
Description
Type
Exemple
access_token
Requis
Token Bearer qui contient OC|$APP_ID |$APP_SECRET
chaîne
« OC|1234|456789 »
api_name
Requis
Identifiant unique du succès utilisé dans l’API et le SDK client. Cette chaîne alphanumérique doit être unique pour l’application. Un appel avec un nom existant mettra à jour le succès, sinon, il en créera un nouveau.
chaîne
“VISIT_3_CONTINENTS”
achievement_type
Requis
Type de succès. Trois types sont disponibles, voir la description précédente pour plus de détails.
énumération avec les valeurs : SIMPLE, COUNT, BITFIELD
“SIMPLE”
achievement_write_policy
Requis
Définit qui peut modifier la progression du succès. Consultez la description précédente pour plus d’informations sur les deux politiques d’écriture.
énumération avec les valeurs : CLIENT_AUTHORITATIVE, SERVER_AUTHORITATIVE
“CLIENT_AUTHORITATIVE”
target
Requis si achievement_type est count ou bitfield
Nombre d’occurrences nécessaires pour débloquer le succès. Voir la description précédente pour plus de détails.
entier
50
bitfield_length
Requis si le type de succès est bitfield
Taille du champ de bits pour ce succès.
entier
7
is_archived
Facultatif. (false par défaut)
Indique si le succès est archivé. Peut aussi être utilisé pour désarchiver un succès. L’archivage ne supprime ni le succès ni la progression des utilisateurs et utilisatrices.
booléen
false
title
Requis
Intitulé du succès visible par l’utilisateur ou l’utilisatrice.
chaîne
« Visite de 3 continents »
description
Requis
Description détaillée du succès visible par l’utilisateur·ice.
chaîne
Ce succès se débloque lorsque...
unlocked_description _override
Facultatif
Description affichée une fois le succès débloqué.
chaîne
« Félicitations ! Vous avez visité trois continents.
is_secret
Facultatif (false par défaut)
Indique si le succès reste caché jusqu’à son obtention.
booléen
false
unlocked_image_file
Facultatif (image par défaut utilisée si non spécifiée)
Chemin local vers l’icône affichée après le déblocage du succès. Doit être un fichier PNG de 256 x 256.
chaîne
@/path/to/unlocked_icon.png; type=image/png
locked_image_file
Facultatif (version en niveaux de gris de l’image débloquée ou image par défaut si non spécifiée)
Chemin local vers l’icône affichée avant le déblocage du succès. Doit être un fichier PNG de 256 x 256.
chaîne
@/path/to/locked_icon.png; type=image/png
Exemple de requête de création/mise à jour :
curl -X POST -d "access_token=OC|$APP_ID|$APP_SECRET" -d "api_name=VISIT_3_CONTINENTS" -d "achievement_type=BITFIELD" -d "achievement_write_policy=SERVER_AUTHORITATIVE" -d "target=3" -d "bitfield_length=7" -d "is_archived=false" -d "title=Achievement Title" -d "description=How to earn me" -d "unlocked_description_override=You did it" -d "is_secret=false" -d "locked_image_file=@/path/to/locked_icon.png;type=image/png" -d "unlocked_image_file=@/path/to/unlocked_icon.png;type=image/png" https://graph.oculus.com/$APPID/achievement_definitions
Exemple de réponse
{"id":"1074233745960170"}
Récupérer les définitions de succès (GET)
Cette requête vous permet d’obtenir des informations sur les succès à afficher à vos utilisateur·ices.
Méthode/URL de requête :
GET https://graph.oculus.com/$APPID/achievement_definitions
Paramètres :
Paramètre
Obligatoire/facultatif
Description
Type
Exemple
access_token
Requis
Token Bearer qui contient OC|$APP_ID |$APP_SECRET
chaîne
« OC|1234|456789 »
api_names
Facultatif
Liste des noms de succès à récupérer. Si omis, tous les succès sont renvoyés.
tableau de chaînes
[« VISITER_3_CONTINENTS », « PARCOURIR_500_KM »]
include_archived
Facultatif
Indique s’il faut inclure les succès archivés. Utilisable uniquement avec un jeton d’accès d’application pour l’authentification.
booléen
false
fields
Facultatif
Liste de noms de champs à récupérer, séparés par des virgules. Peut inclure : api_name, achievement_type, achievement_write_policy, target, bitfield_length, is_archived, title, description, unlocked_description_override, is_secret, locked_image_uri, unlocked_image_uri. Si omis, seuls les ID sont renvoyés.
Chaîne
api_name,achievement_type
Les définitions des champs sont identiques à celles de l’appel API de création ou de mise à jour ci-dessus. Notez que des URI d’images serveur sont fournies à la place des emplacements de fichiers locaux.
Exemple de demande
curl -X GET "https://graph.oculus.com/$APP_ID/achievement_definitions?fields=api_name,achievement_type,achievement_write_policy,target,bitfield_length,is_archived,title,description,unlocked_description_override,is_secret,locked_image_uri,unlocked_image_uri&api_names=\[\"VISIT_3_CONTINENTS\"\]&access_token=OC\|$APP_ID\|$APP_SECRET"
Écrire (et débloquer) la progression d’un succès (POST)
Cette méthode met à jour la progression d’un·e utilisateur·ice pour un succès donné. Elle accumule la progression pour les succès de type compteur, au lieu d’écraser les valeurs. Par exemple, add_count=25 incrémentera le compteur de 25, sans définir le compteur actuel à 25. Cette approche permet de gérer élégamment les conflits survenant lors de la mise à jour des succès à partir de plusieurs sources simultanément ou lors de la progression à partir de plusieurs appareils en mode hors ligne.
Méthode/URL de requête :
POST https://graph.oculus.com/$USER_ID/achievements
Paramètres :
Paramètre
Obligatoire/facultatif
Description
Type
Exemple
access_token
Requis
Token Bearer qui contient OC|$APP_ID |$APP_SECRET
chaîne
« OC|1234|456789 »
api_name
Requis
Nom du succès à mettre à jour.
chaîne
“VISIT_3_CONTINENTS”
add_count
Obligatoire pour les succès de type Count
Valeur à ajouter au compteur de progression. Valide uniquement pour les succès de type COUNT.
entier
25
add_bits
Obligatoire pour les succès de type Bitfield
Bits à ajouter à la progression. Valide uniquement pour les succès de type BITFIELD.
chaîne
“110001”
force_unlock
Facultatif (false par défaut)
Débloque instantanément le succès, quelle que soit la progression. Nécessaire pour débloquer les succès SIMPLE.
La réponse inclura le paramètre just_unlocked indiquant si cette opération a déclenché le déblocage du succès.
Interroger la progression d’un succès (GET)
Cette méthode permet de récupérer la progression d’un·e utilisateur·ice pour un succès.
Méthode/URI de requête :
GET https://graph.oculus.com/$USER_ID/achievements
Paramètres :
Paramètre
Obligatoire/facultatif
Description
Type
Exemple
access_token
Requis
Token Bearer qui contient OC|$APP_ID |$APP_SECRET
chaîne
« OC|1234|456789 »
api_names
Facultatif
Liste des noms de succès à récupérer. Si omis, tous les succès sont renvoyés.
tableau de chaînes
["VISITER_3_CONTINENTS", "PARCOURIR_500_KM"]
fields
Facultatif
Liste de noms de champs à récupérer, séparés par des virgules. Peut inclure : id, unlock_time, is_unlocked, count_progress. Si omis, seuls les ID sont renvoyés.
Chaîne
api_name,achievement_type
Exemple de demande
curl -X GET "https://graph.oculus.com/$USERID/achievements?access_token=OC\|$APP_ID\|$APP_SECRET&api_names=\[\"VISIT_3_CONTINENTS\"\]&fields=target,bitfield_progress,is_unlocked,unlock_time"
Vérifiez que la politique d’écriture de votre succès est bien définie sur « Server Authoritative ». Si elle est « Client Authoritative », ces requêtes REST ne fonctionneront pas. Dans ce cas, utilisez les méthodes SDK pour interagir avec votre succès.
Si la politique d’écriture est « Server Authoritative » et que les requêtes REST ne fonctionnent toujours pas :
Assurez-vous d’avoir remplacé les variables $VAR comme $APPID et $APP_SECRET par leurs valeurs réelles. Vous pouvez récupérer ces valeurs Developer Center > Development > API (Espace développeurs > Développement > API).