Scénarios d’erreur courants de Game Saves
Identificateur de configuration de service mal configuré
Si l’erreur 0x80830002 (E_GS_NO_ACCESS) se produit lorsque vous appelez XGameSaveFilesGetFolderWithUiAsync, l’identificateur de configuration de service (SCID) de votre code source est probablement incorrect. Vérifiez que le SCID correspond à celui qui apparaît dans Microsoft Partner Center. Le message d’erreur système suivant peut apparaître.
Implications de la liaison de jeu
Si votre titre utilise la liaison de jeu et ajoute ultérieurement une version PC du Microsoft Game Development Kit (GDK), il doit utiliser l’AppID de compte Microsoft (MSA) (MSAppID) du produit principal. L’utilisation du MSAAppID du produit secondaire provoque des erreurs 0x80830002.Paramètres Partner Center mal configurés
Des paramètres Partner Center mal configurés peuvent être une cause fréquente d’erreurs Game Saves. Pour que les Game Saves des utilisateurs se synchronisent vers et depuis le cloud, sélectionnez l’option Connected Storage dans Partner Center sous Gameplay settings > Title Storage. L’image suivante illustre la configuration de Connected Storage dans Partner Center requise pour que les Game Saves puissent se synchroniser correctement vers et depuis le cloud.
Nettoyage des handles
La synchronisation des Game Saves vers et depuis le cloud est gérée à l’aide de plusieurs handles. Si la durée de vie de ces handles n’est pas correctement gérée, un comportement indéfini peut se produire lors de la synchronisation vers et depuis le cloud.XGameSaveFiles :
- Appelez XGameSaveFilesGetFolderWithUiAsync au lancement du titre et lors de sa reprise. Cet appel crée implicitement un handle de fournisseur Game Saves. Le système d’exploitation le libère lorsque le titre est suspendu ou arrêté.
XGameSave :
- Supprimez
XGameSaveUpdateHandleaprès un appel à XGameSaveSubmitUpdate, que la mise à jour ait réussi ou échoué. - Supprimez
XGameSaveContainerHandlelorsque le titre est suspendu ou arrêté. - Supprimez
XGameSaveProviderHandlelorsque le titre est suspendu ou arrêté.
Confirmation des Game Saves
Pour confirmer que vos Game Saves sont chargées dans le cloud, le titre doit lancer le processus de libération du verrou du titre, puis commencer à charger les données. Vous pouvez observer ce trafic avec Fiddler en inspectant le trafic réseau de Game Saves. Pour plus d’informations sur le flux de synchronisation de Game Saves, consultez Comprendre le flux de synchronisation de Game Saves.Erreurs courantes
Si la tentative de synchronisation est refusée, appelez à nouveau
XGameSaveFilesGetFolderWithUI afin que le chemin de fichier soit écrit localement. Cet appel retourne S_OK.
Cette erreur se produit également lors de l’appel à XGameSaveFilesGetFolderWithUIResult avec un fournisseur obsolète. Cette erreur se produit aussi lorsque les Gaming Runtime Services (GRTS) désinitialisent un fournisseur Game Saves lors de la suspension d’un titre ou lorsque d’autres événements gérés par le système se produisent. Lorsque le titre reprend, appelez XGameSaveFilesGetFolderWithUiAsync pour réinitialiser le fournisseur et garantir que les données enregistrées sont à jour. Si le titre reprend sans effectuer cet appel, le fournisseur reste non initialisé. Les opérations Game Saves échouent.| | 0x8007000E | E_OUTOFMEMORY | Il ne reste plus de mémoire pour traiter votre requête. | Cette erreur se produit généralement pour plusieurs raisons. Vous pouvez capturer les allocations de mémoire avec PIX et rechercher les fuites de mémoire. Tenez compte des points suivants :
1. Les handles utilisent un décompte de références. Recherchez les fuites de handles. Fermez les handles de mise à jour après une mise à jour réussie ou non. Évitez d’avoir un grand nombre de mises à jour en attente.
2. Utilisez
XMemTransferMemory comme solution de contournement pour transférer une partie de la mémoire vers la partition système.3. Fragmentation importante de la mémoire. | | 0x80070057 | E_INVALIDARG | Un argument non valide a été fourni. Le paramètre est incorrect. | Cette erreur peut se produire si le SCID utilisé dans
XGameSaveFilesGetFolderWithUI sur PC n’est pas un GUID valide. | | --- | --- | XGameSaveFilesGetFolderWithUI se bloque indéfiniment ou échoue de façon sporadique. | Vérifiez qu’aucune boîte de dialogue système GameSave n’est ouverte sur la machine que vous utilisez et qu’aucune boîte de dialogue n’apparaît sur d’autres consoles de l’utilisateur. Une boîte de dialogue de connexion ou de synchronisation ouverte peut provoquer un comportement indéfini si elle est ignorée. | 0x80830006 | E_QUOTA_EXCEEDED | Le jeu a dépassé le quota par utilisateur du jeu. Par défaut, ce quota est de 256 Mo. | Appliquez les bonnes pratiques suivantes pour la gestion des données Game Saves. 1. Ne stockez pas de données dépendantes réparties entre plusieurs conteneurs.
2. Utilisez moins de blobs dans le conteneur pour améliorer les performances.
Pour plus d’informations, consultez Limites et quotas des systèmes de stockage | | 0x80830005 | E_GS_UPDATE_TOO_BIG | La taille de la mise à jour de sauvegarde est trop importante. | La taille totale d’une mise à jour
XGameSave doit être inférieure à GS_MAX_BLOB_SIZE (16 Mo), quel que soit le nombre total de blobs dans le contexte de mise à jour. | | 0x8924010c | E_GAMERUNTIME_INVALID_HANDLE | Cette valeur de handle n’est plus valide. | Cette erreur se produit lors d’une tentative de réutilisation de handles non fermés d’un utilisateur précédent. Fermez les handles qui ne sont plus utilisés. | | 0x80830001 | E_GS_INVALID_CONTAINER_NAME | Le nom du conteneur n’est pas valide. | Les caractères valides pour la partie chemin (jusqu’à la dernière barre oblique incluse) sont les lettres majuscules (A-Z), les lettres minuscules (a-z), les chiffres (0-9), les traits de soulignement (_) et les barres obliques (/). La partie chemin peut être vide.Les caractères valides pour la partie nom de fichier (tout ce qui suit la dernière barre oblique) sont les lettres majuscules (A-Z), les lettres minuscules (a-z), les chiffres (0-9), les traits de soulignement (_), les points (.) et les traits d’union (-). Le nom de fichier ne peut pas être vide, se terminer par un point ni contenir deux points consécutifs. | | 0x80830003 | E_GS_OUT_OF_LOCAL_STORAGE | L’appareil ne dispose pas d’une capacité de stockage suffisante pour enregistrer le jeu. | Les utilisateurs doivent libérer de l’espace de stockage Game Save sur l’appareil. Cette erreur peut se produire même si le quota par utilisateur n’est pas dépassé.
Pour plus d’informations, consultez Gestion des sauvegardes de jeu via l’appareil. | | 0x80830007 | E_GS_PROVIDED_BUFFER_TOO_SMALL | La mémoire tampon fournie à l’API était trop petite. | Cette erreur se produit si l’appelant passe aux API Game Save une mémoire tampon plus petite que la taille des données de blob lues. Appelez XAsyncGetResultSize si vous utilisez des appels
Async pour garantir l’utilisation de la bonne taille de mémoire tampon. | | 0x80830008 | E_GS_BLOB_NOT_FOUND | Le blob spécifié est introuvable. | Pour confirmer l’existence d’un blob, utilisez les outils xbstorage ou gamesaveutil pour télécharger le blob. Effectuez cette étape après que le titre a libéré le verrou (lorsqu’il est arrêté ou suspendu) afin d’éviter un comportement indéfini.Pour plus d’informations, consultez Outils Game Saves. | | 0x80830009 | E_GS_NO_SERVICE_CONFIGURATION | Le titre n’est pas correctement configuré pour le stockage connecté. | Cette erreur se produit lorsque le SCID est incorrect ou lorsque le titre n’est pas correctement configuré dans Partner Center.
Pour plus d’informations, consultez Configurations de Partner Center. | | 0x8083000A | E_GS_CONTAINER_NOT_IN_SYNC | Le conteneur n’est pas encore synchronisé. | Vérifiez que le conteneur XGameSave est synchronisé avant de lui soumettre des mises à jour. | | 0x8083000B | E_GS_CONTAINER_SYNC_FAILED | La synchronisation du conteneur a échoué. | Vérifiez que la connexion Internet est stable lors de la synchronisation des données depuis le cloud. | | 0x8083000C | E_GS_USER_NOT_REGISTERED_IN_SERVICE | Indique que le MSA de l’utilisateur n’est pas encore un compte des services XBOX. | Vérifiez que l’utilisateur que vous utilisez est correctement inscrit dans Partner Center. | | 0x8083000D | E_GS_HANDLE_EXPIRED | Le handle utilisé par la fonction a expiré et doit être réacquis. |
XGameSaveUpdateHandle ne peut pas être réutilisé après une soumission ou lorsque le titre est suspendu | | 0x8083000E | E_GS_ASYNC_FUNCTION_REQUIRED | La fonction est appelée sur un thread sensible au temps, ce qui risque de provoquer des interblocages. | Utilisez plutôt l’implémentation asynchrone. | | 0x8083000F | E_GS_PROVIDER_MISMATCH | Le jeu mélange des appels XGameSave et XGameSaveFiles, ce qui n’est pas pris en charge. | Un seul type d’API Game Saves peut être initialisé à la fois dans un titre. De plus, utilisez une seule API Game Saves par titre. Si vous travaillez avec plusieurs titres, il existe des méthodes d’interopérabilité entre les différentes API. Pour plus d’informations, consultez Interopérabilité entre XGameSave et XGamesaveFiles | | 0x80831001 | E_GS_TERMINATEDTITLE_STALE_DATA
ou
TerminateApplicationAfterSuspend| Cette information n’est pas exposée par les API destinées aux utilisateurs. Ce comportement est attendu. La gestion de la durée de vie des processus (PLM) arrête le titre lorsqu’elle détecte des données obsolètes et que l’appareil se reconnecte à Internet. Après un événement de suspension, l’application se ferme. | Cette sortie de débogage n’est pas un bogue. Lorsque le jeu est arrêté parce que le verrou Game Saves n’a pas été obtenu à l’initialisation (par exemple, pendant le jeu hors connexion ou lors d’un choix dans la boîte de dialogue de conflit), le système d’exploitation arrête le jeu lors de la suspension afin de garantir un état propre au prochain lancement. |
Codes Win32 NTSTATUS
AvecXGameSaveFiles, les codes d’état suivants peuvent apparaître.
Documentation de référence des API
- XGameSave (contenu de l’API)
- Fonctions
- XGameSaveFiles (contenu de l’API)
- Fonctions
- xasync (contenu de l’API)
- Fonctions
