> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Procédures pas à pas et exemples de Game Saves

> Procédures pas à pas de Game Saves sur XBOX pour la configuration dans Partner Center, les modèles d'écriture sécuritaire, la gestion hors ligne, les tests de scénarios de synchronisation et la migration de titres.

Cet article fournit des instructions détaillées pour les scénarios courants de développement et de migration lors de l'utilisation de Game Saves. Il couvre la configuration essentielle dans Microsoft Partner Center, les pratiques exemplaires pour écrire des données de façon sécuritaire, la gestion des sauvegardes propre à chaque plateforme et les procédures de test recommandées.

## Configurations dans Partner Center

### Activer les services XBOX et Game Saves pour votre titre

Pour utiliser les API Game Saves, effectuez les étapes suivantes dans Partner Center.

* Activez les services XBOX.
  1. Connectez-vous à [Partner Center](https://partner.microsoft.com/dashboard/home).
  2. Accédez à votre titre, puis activez les services XBOX dans les paramètres. Pour en savoir plus sur cette étape, consultez [Configuration d'une application ou d'un jeu dans Partner Center, pour les partenaires gérés](/fr-CA/services/xbox-services/fundamentals/portal-config/live-setup-partner-center-partners#2-contact-your-microsoft-representative-to-enable-your-app-or-game).
* Obtenez votre identificateur de configuration de service (SCID). Toutes les opérations de lecture et d'écriture doivent être associées à un SCID. Le SCID sert également à l'initialisation de Game Saves.
  * Dans Partner Center, trouvez le SCID sous l'onglet **XBOX services** > **XBOX settings** de votre titre. Vous pouvez également trouver l'ID d'application (MSAAppID) de votre compte Microsoft (MSA) sur cette page.
    <img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/partner-center-xbox-services-view.png?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=7ba30f0150039b4e968e6915ad0eb4dd" alt="Vue des services XBOX dans Partner Center." width="622" height="293" data-path="images/gdk/features/common/partner-center-xbox-services-view.png" />

Après avoir obtenu votre SCID et votre MSAAppID, ajoutez cet ID d'application au fichier de configuration (.mgc) du titre.

Pour en savoir plus sur les fichiers de configuration de jeu, consultez [Créer le fichier Microsoft Game Config .mgc](/fr-CA/build/core-features/common/game-config/MicrosoftGameConfig-Overview).

## Scénarios de développement

### Où dois-je intégrer Game Saves dans mon code?

La logique de Game Saves dépend de la connexion de l'utilisateur. Ajoutez le code de Game Saves à côté du flux de connexion de l'utilisateur.

### Comment m'assurer que mes données de sauvegarde ne deviennent pas corrompues?

Pour sauvegarder des données de façon sécuritaire et éviter la corruption, suivez ces étapes. Ces directives s'appliquent à toutes les opérations de sauvegarde.

1. Écrivez dans un fichier temporaire.
   * Sérialisez vos données de sauvegarde dans un nouveau fichier (par exemple, `save.tmp`) plutôt que d'écraser la sauvegarde active. Cette étape protège la sauvegarde existante si votre processus est interrompu en cours d'écriture.
2. Fermez le handle d'écriture une fois l'écriture entièrement validée sur le disque.
3. Remplacez l'ancien fichier de sauvegarde de façon atomique par le nouveau fichier temporaire au moyen de la fonction Win32 [ReplaceFile](https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-replacefilea).

### Comment prendre en charge les appareils hors ligne?

Il vous incombe de déterminer le comportement du titre en cas de perte de connexion, avant et après l'initialisation de Game Saves.

Pour en savoir plus sur le comportement hors ligne, consultez [Comprendre le flux de synchronisation de Game Saves](/fr-CA/build/core-features/common/game-save/game-saves-syncing#connection-check).

### De quelles interactions utilisateur dois-je tenir compte?

Le système d'exploitation affiche des invites système lorsqu'une action nécessite l'intervention de l'utilisateur. Pour en savoir plus sur ces invites, consultez [Boîtes de dialogue de Game Saves](/fr-CA/build/core-features/common/game-save/game-saves-dialogues).

### Existe-t-il un moyen de sauvegarder localement et uniquement sur l'appareil?

Si vous transmettez un handle d'utilisateur `null` au processus d'initialisation de Game Save, le système crée un fournisseur machine seulement. Les données sont stockées localement et persistent sur l'appareil, avec une limite maximale de 256 Mo. Les données ne se synchronisent pas avec le nuage.

Pour en savoir plus sur le stockage de Game Saves, consultez [Systèmes de stockage de Game Saves](/fr-CA/build/core-features/common/game-save/game-saves-storage-systems).

### Gérer Game Saves au moyen de l'appareil

#### Accéder aux sauvegardes locales sur PC au moyen de l'Explorateur de fichiers

Si votre titre s'exécute sur PC, vous avez un accès direct aux fichiers. Selon l'implémentation de l'API Game Saves, vous pouvez accéder à vos sauvegardes locales aux emplacements suivants.

| API Game Saves | Chemin du fichier |
| :- | :- |
| XGameSaveFiles | `%AppData%\Local\Packages\<PACKAGE_NAME>\SystemAppData\xgs\<HexXuid>_<Scid>\` |
| XGameSave | `%AppData%\Local\Packages\<PACKAGE_NAME>\SystemAppData\wgs\<HexXuid>_<Scid>\` |

Lorsque vous manipulez des données sur PC, la logique de synchronisation s'applique toujours. Par exemple, modifier des données lorsque le titre ne détient pas de verrou cause des conflits.

#### Accéder aux sauvegardes locales sur console

Gérez les données de sauvegarde de la console au moyen de l'interface utilisateur XBOX. Pour y accéder, suivez les étapes suivantes.

1. Sélectionnez le bouton **Accueil** de la manette XBOX.
2. Sélectionnez **Mes jeux et applications** > **Tout afficher**.
3. Placez le curseur sur votre jeu, puis sélectionnez le bouton **Affichage**.
4. Sélectionnez **Données sauvegardées**.

<img src="https://mintcdn.com/microsoft-4404708b/sIrPFR_ir_sNKVEv/images/gdk/features/common/console-storage-management.png?fit=max&auto=format&n=sIrPFR_ir_sNKVEv&q=85&s=1440050534d3c4d168d1e964d3638afe" alt="Vue de gestion de Game Saves dans le stockage de la console." width="1314" height="377" data-path="images/gdk/features/common/console-storage-management.png" />

Tenez compte des éléments suivants lorsque vous manipulez des données directement sur la console.

* La suppression de données sur la console au moyen de l'interface utilisateur du système ne supprime pas la copie stockée dans le nuage. Lorsque vous relancez le titre, il synchronise les données à partir du nuage.
* Les données du fournisseur machine apparaissent comme un utilisateur sans nom. Ces données demeurent sur l'appareil, ne se synchronisent pas avec le nuage et sont liées à l'appareil.

Pour en savoir plus sur le fournisseur machine, consultez [Systèmes de stockage de Game Saves](/fr-CA/build/core-features/common/game-save/game-saves-storage-systems#game-saves-storage-systems).

Pour un contrôle plus détaillé des sauvegardes, utilisez les [outils de Game Saves](/fr-CA/build/core-features/common/game-save/game-saves-tools#manipulating-game-saves).

## Scénarios de test

Lorsque vous créez des cas de test, séparez la validation des données de la logique de sauvegarde de jeu.

### Vérifier si les sauvegardes se synchronisent correctement vers le nuage et à partir de celui-ci

Suivez les étapes suivantes pour vérifier que la synchronisation est correcte. Les flux de test vérifient le comportement.

`XGameSaveFiles` :

1. Confirmez que le SCID est correct.
2. Confirmez que vous utilisez le bon handle d'utilisateur.
3. Confirmez que le titre appelle `XGameSaveFilesGetFolderWithUIAsync` pendant la session de jeu en cours. Si le titre reprend à partir d'un état suspendu, appelez la fonction.
   1. Utilisez Fiddler pour confirmer que le verrou a été acquis.
   2. Enregistrez ce chemin et utilisez-le plus tard pour confirmer que les données sont téléversées.
4. Écrivez des données dans le chemin de fichier fourni par `XGameSaveFilesGetFolderWithUIAsync`.
5. Arrêtez ou suspendez le titre.
6. Attendez de 10 à 30 secondes pour que le système d'exploitation téléverse automatiquement les données dans le nuage et libère le verrou.
   1. Confirmez au moyen de Fiddler que les données ont été téléversées et que le verrou a été libéré.
7. Supprimez manuellement les données dans le dossier fourni par `XGameSaveFilesGetFolderWithUIAsync`.
   1. Sur console, accédez à ces données au moyen des paramètres du joueur.
8. Relancez le titre, puis tentez de connecter l'utilisateur.
9. Une boîte de dialogue de synchronisation s'affiche, montrant une synchronisation de téléchargement active à partir du nuage.

Pour vous aider à tester la réussite de la synchronisation, consultez les ressources suivantes :

* [Outils de Game Saves pour inspecter le trafic et manipuler les sauvegardes](/fr-CA/build/core-features/common/game-save/game-saves-tools)
* [Comprendre le flux de synchronisation de Game Saves](/fr-CA/build/core-features/common/game-save/game-saves-syncing)

### Vérifier si les sauvegardes sont itinérantes correctement

Pour un plan de test permettant de confirmer l'itinérance des données, consultez [Plan de test XR-052-06](https://learn.microsoft.com/build/store/policies/XR/XR052#052-06-cloud-storage-roaming).

## Scénarios de migration

### Partager des sauvegardes entre titres

Pour transférer des données d'un titre à un autre ou y accéder, effectuez deux étapes.

1. Modifiez les stratégies d'accès du titre auquel vous voulez accéder dans Partner Center.
2. Initialisez les fournisseurs Game Saves des deux titres dans le code source.

#### Modifier les stratégies d'accès

Un titre contrôle quels titres ont accès à ses données de sauvegarde en configurant des stratégies d'accès.

1. Accédez à [Partner Center](https://partner.microsoft.com/dashboard).
2. Sélectionnez **Apps and games** > **\<votre titre>** > **Gameplay settings**.
3. Dans **Gameplay Settings**, sélectionnez **Access Policies**, puis développez **Connected Storage**.
4. Sélectionnez **Add app/service**, puis ajoutez les titres auxquels vous voulez donner accès.
5. Lorsque vous avez terminé d'ajouter les titres, sélectionnez **Save**, puis **Publish**. Les modifications prennent effet dans l'heure qui suit.

La capture d'écran suivante montre un exemple où le titre GameSaveFilesCombo est rendu entièrement accessible au titre GameSaveSample.

<img src="https://mintcdn.com/microsoft-4404708b/UZTRJSf0emX1fheE/images/gdk/features/common/partner-center-access-policy.png?fit=max&auto=format&n=UZTRJSf0emX1fheE&q=85&s=25eae43c7e7d88b824558596d849cbfa" alt="Vue de Partner Center pour modifier la stratégie d'accès d'un titre." width="1280" height="598" data-path="images/gdk/features/common/partner-center-access-policy.png" />

#### Initialiser les fournisseurs Game Save

Maintenant que vous avez l'autorisation d'accéder au premier titre, vous pouvez lire les données `XGameSave` de l'autre titre.

* Si vous utilisez `XGameSave`, appelez `XGameSaveInitializeProvider` ou `XGameSaveInitializeProviderAsync` pour chaque titre.
* Si vous utilisez `XGameSaveFiles`, les fournisseurs sont initialisés implicitement. Appelez `XGameSaveFilesGetFolderWithUiAsync` pour chaque titre.

### Interopérabilité entre XGameSave et XGameSaveFiles

Un titre pourrait devoir utiliser `XGameSave` conjointement avec `XGameSaveFiles`. Les raisons typiques pourraient être les suivantes :

* L'éditeur a un titre existant sur console qui utilise déjà `XGameSave`.
* L'éditeur ne veut pas mettre à jour ce titre existant pour utiliser `XGameSaveFiles`.
* L'éditeur estime qu'ajouter `XGameSaveFiles` à un titre PC est plus facile que d'utiliser `XGameSave`, mais souhaite tout de même prendre en charge les sauvegardes croisées entre PC, console et la diffusion de jeux XBOX en continu.

Passer de `XGameSave` à `XGameSaveFiles` est assez simple. Lorsque le titre appelle [XGameSaveFilesGetFolderWithUiAsync](/fr-CA/reference/system/xgamesavefiles/functions/xgamesavefilesgetfolderwithuiasync), il mappe les conteneurs et les blobs à des répertoires et à des fichiers selon les règles suivantes :

* Toute barre oblique (/) dans le nom du conteneur crée la structure de répertoires dans laquelle se trouve le fichier.
* Les caractères suivants ne sont pas valides pour `XGameSaveFiles`. Si le système rencontre ces caractères, il les mappe à un trait de soulignement (\_) :
  * Les caractères de \0 à \001f, inclusivement.
* Les caractères suivants ne sont pas valides pour `XGameSaveFiles`. Si le système rencontre ces caractères, il les mappe à un point (.) :
  * Guillemets (")
  * Signe inférieur à (\<)
  * Signe supérieur à (>)
  * Barre verticale (|)
  * Astérisque (\*)
  * Point d'interrogation (?)
  * Barre oblique inverse (\\)
* Une barre oblique (/) dans le nom du blob est mappée à un point (.) dans le nom du fichier.
* Les fichiers sont limités à 16 Mo. `XGameSave` prend en charge une taille de téléversement maximale de 16 Mo.

Lorsque le titre revient de `XGameSaveFiles` à `XGameSave`, il restaure les noms d'origine des conteneurs et des blobs si les noms de fichiers restent inchangés ou ne sont pas déplacés.

### Porter des titres antérieurs vers Game Saves sur PC avec les sauvegardes infonuagiques sans code

Certains titres que vous portez vers PC Game Pass pourraient nécessiter une solution de sauvegarde infonuagique sans code. Cette exigence peut survenir dans les scénarios suivants :

* Le titre s'exécute en tant qu'application x86. Il utilise le Microsoft Game Development Kit (GDK) uniquement sous sa forme empaquetée.
* Le titre est créé sans code personnalisé, au moyen d'outils comme Blueprint dans Unreal Engine ou Bolt dans Unity.

Les titres qui utilisent les sauvegardes infonuagiques sans code lisent et écrivent dans leur répertoire de sauvegarde désigné au moyen des API d'E/S de fichiers Win32 standard. Le système synchronise automatiquement les données. Vous n'avez pas besoin d'écrire de code particulier pour gérer la synchronisation et le téléversement. La synchronisation a lieu avant le lancement du titre.

Les sauvegardes infonuagiques sans code sont téléversées lorsque le titre ne s'exécute plus sur PC. Le téléversement a lieu lorsque l'une des conditions suivantes est remplie :

* Le titre est arrêté.
* L'utilisateur suivi se déconnecte.
* L'état d'alimentation du PC change.
* 30 minutes se sont écoulées depuis la dernière écriture du titre dans la zone de sauvegarde désignée.

La solution de sauvegarde infonuagique sans code est construite sur `XGameSaveFiles` et en partage toutes les limitations relatives à la taille des fichiers et aux limites de stockage par utilisateur. Les fichiers sont limités à 64 Mo (ou à 16 Mo s'il faut une interopérabilité avec `XGameSave` ou Connected Storage). Par défaut, le stockage par utilisateur est limité à 256 Mo. Les titres qui ont besoin de limites de stockage par utilisateur plus élevées peuvent collaborer avec leur gestionnaire de partenaires développeurs (DPM) pour demander une exception.

<Note>
  Il existe des conventions d'affectation de noms et des limites de caractères particulières pour les répertoires et les noms de fichiers. Pour en savoir plus, consultez [Logique des chemins XGameSaveFiles](/fr-CA/build/core-features/common/game-save/xgamesavefiles#xgamesavefiles-path-logic).
</Note>

Les sauvegardes infonuagiques sans code sont prises en charge uniquement sur PC. Le titre nécessite le [modèle d'utilisateur simplifié](/fr-CA/build/core-features/common/user/users-opting-into-simplified-model). Celui-ci garantit qu'un utilisateur est connecté avant le lancement du titre. Si un utilisateur ne peut pas être connecté au titre, celui-ci ne se lance pas. Si l'utilisateur est déconnecté pendant le jeu, le titre est arrêté.

<Info>
  Les sauvegardes infonuagiques sans code exigent que le titre soit lancé en tant que build empaqueté au moyen de `wdapp install`. Lancer directement le fichier `.exe` n'active pas la redirection des sauvegardes infonuagiques.

  Lorsqu'un build empaqueté s'exécute, les sauvegardes écrites au moyen de `NoCodePCRoot` sont redirigées vers le stockage géré par `XGameSaveFiles`. Un lancement direct ultérieur du `.exe` lit plutôt le dossier physique `NoCodePCRoot`, qui pourrait être vide, ce qui donne l'impression que les sauvegardes sont manquantes. Pour éviter ce problème, testez toujours les sauvegardes infonuagiques sans code avec des builds empaquetés au moyen de `wdapp install`.
</Info>

### Activer les sauvegardes infonuagiques sans code

Pour activer les sauvegardes infonuagiques sans code, effectuez les étapes suivantes :

1. Modifiez votre fichier `MicrosoftGame.config`.
2. Activez le modèle d'utilisateur simplifié.
3. Indiquez le dossier racine des fichiers de sauvegarde.
4. Fournissez le SCID correspondant du titre.

L'exemple de code suivant illustre ce processus.

```xml theme={null}
<Game configVersion="1">
   <Identity Name="SampleNameOne" Publisher="CN=NoPublisher"/>
   <SaveGameStorage>
      <NoCodePCRoot RelativeTo="SavedGames">test\path</NoCodePCRoot>
      <SCID>DF9D8061-4790-4B84-86B4-CD060B00B4DD</SCID>
      <MaxUserQuota>256</MaxUserQuota>
   </SaveGameStorage>
   <!-- Content removed for brevity -->
   
   <!-- Must also opt into requiring a default user at launch -->
   <AdvancedUserModel>false</AdvancedUserModel>
</Game>
```

Le dossier racine que vous indiquez pour `NoCodePCRoot` doit être relatif à l'une des quelques options suivantes.

| RelativeTo | Emplacement du dossier sur PC |
| - | - |
| `AppData` | Correspond à la variable d'environnement %APPDATA% |
| `Public` | Correspond à la variable d'environnement %PUBLIC% |
| `LocalAppData` | Correspond à la variable d'environnement %LOCALAPPDATA% |
| `LocalAppDataLow` | Correspond à %USERPROFILE%\AppData\LocalLow |
| `ProgramData` | Correspond à la variable d'environnement %PROGRAMDATA% |
| `SavedGames` | Correspond à %USERPROFILE%\Saved Games |
| `UserProfile` | Correspond à la variable d'environnement %USERPROFILE% |

<Info>
  Utilisez `SavedGames` comme valeur de `RelativeTo`. Le dossier Parties enregistrées (`%USERPROFILE%\Saved Games`) correspond à l'ID de dossier connu Windows `FOLDERID_SavedGames`. OneDrive ne synchronise pas ce dossier par défaut.

  Évitez d'utiliser d'autres emplacements comme `AppData` (`%APPDATA%`). OneDrive peut synchroniser ces emplacements et causer des conflits avec la synchronisation des sauvegardes infonuagiques.

  Pour en savoir plus sur `FOLDERID_SavedGames`, consultez [SHGetKnownFolderPath](https://learn.microsoft.com/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath).
</Info>

*Vous ne pouvez pas placer de fichiers directement dans le répertoire racine*. Imbriquez-les dans au moins un sous-dossier du dossier racine. Par exemple, utiliser directement un nom de fichier, comme `<NoCodePCRoot RelativeTo="SavedGames">savegame1.sav</NoCodePCRoot>`, n'est pas valide, car savegame1.sav est ignoré. `<NoCodePCRoot>` sert à définir un chemin de répertoire, et non un fichier précis.

## Exemples de code

* [GameSaveCombo](https://learn.microsoft.com/samples/microsoft/xbox-gdk-samples/gamesavecombo/)
* [GameSaveFilesCombo](https://learn.microsoft.com/samples/microsoft/xbox-gdk-samples/gamesavefilescombo/)

## Documentation de référence de l'API

* [XGameSaveFiles (contenu de l'API)](/fr-CA/reference/system/xgamesavefiles/xgamesavefiles_members)
  * Fonctions
    * [XGameSaveFilesGetFolderWithUiAsync](/fr-CA/reference/system/xgamesavefiles/functions/xgamesavefilesgetfolderwithuiasync)

## Voir aussi

[Table des matières de Game Saves](/fr-CA/build/core-features/common/game-save/game-saves-toc)


## Related topics

- [Compiler et exécuter votre premier titre console GDKX](/fr/home/build-first-title/first-console-title-walkthrough.md)
- [XBOX Rapid Updates](/fr/publishing/game-publishing/concepts/certification/xbox-rapid-updates.md)
- [Configurer et installer le GDK](/fr/home/setup-install/get-started.md)
- [XR055 Succès et Gamerscore](/fr/publishing/certification/fma/xr-055.md)
- [Guide de programmation Direct3D 12](/fr-CA/build/gdk-and-engines/guides/directx-12-programming-guide.md)
