Démarrage rapide de Game Saves
PlayFab Game Saves permet aux joueurs de poursuivre leur progression de manière transparente d’un appareil à l’autre en synchronisant les données de sauvegarde dans le cloud. Ce guide de démarrage rapide vous explique comment implémenter une solution complète de sauvegarde de jeu pour les plateformes XBOX et Windows.Prérequis
Avant de commencer, assurez-vous :- D’avoir effectué l’intégration à Game Saves
- D’avoir consulté les exigences d’implémentation dans la section Vue d’ensemble
- D’avoir rempli les exigences répertoriées ci-dessous
- (Facultatif) D’avoir cloné ou consulté l’exemple Game Saves de bout en bout pour Windows sur GitHub : PlayFabGameSaveSample-Windows. L’exemple illustre les flux d’initialisation, de synchronisation, de gestion des conflits et de chargement mentionnés dans ce démarrage rapide.
Ce que vous allez apprendre
Dans ce guide, vous allez apprendre à :- Initialiser le système Game Saves
- Télécharger les données de sauvegarde existantes depuis le cloud
- Charger les données de sauvegarde locales dans le cloud
- Gérer les conflits et les rappels d’interface utilisateur
- Gérer les scénarios d’appareil actif
Exigences de développement
Exigences logicielles
- Un compte de développeur PlayFab
- Visual Studio 2019 ou Visual Studio 2022 est recommandé pour le développement avec le Gaming Runtime. Pour plus de détails, consultez https://learn.microsoft.com/en-us/gaming/gdk/docs/gdk-dev/get-started/overviews/sdk-and-tools#install-visual-studio.
- Un accès à la dernière version du Microsoft Game Development Kit (GDK)
Vue d’ensemble du flux Game Saves
Le système Game Saves suit un modèle simple qui fonctionne de manière transparente d’un appareil à l’autre :Configuration initiale (une fois par session de jeu)
- Initialiser les services : configurez les modules PlayFab Core et Game Saves
- Authentifier l’utilisateur : connectez le joueur à l’aide de l’authentification XBOX
- Télécharger les sauvegardes existantes : synchronisez sur l’appareil local les données de sauvegarde provenant d’autres appareils
- Obtenir l’emplacement de sauvegarde : obtenez le dossier racine de sauvegarde local dans lequel votre jeu doit écrire les fichiers de sauvegarde
Pendant le jeu
- Écrire les fichiers de sauvegarde : votre jeu écrit les données de sauvegarde dans le dossier racine de sauvegarde local, comme d’habitude
- Charger les modifications : chargez régulièrement dans le cloud les fichiers de sauvegarde modifiés
- Continuer à jouer : répétez les étapes 5 et 6 si nécessaire pendant la session de jeu
Fin de session
- Chargement final : chargez les dernières modifications avant que le joueur quitte le jeu
- Synchronisation en arrière-plan : sur XBOX/Windows, le système gère automatiquement les derniers chargements à la fermeture du jeu
Principaux avantages
- Prise en charge hors connexion : les joueurs peuvent commencer à jouer même sans connexion Internet
- Résolution automatique des conflits : une interface utilisateur intégrée gère les conflits de sauvegarde entre appareils
- Chargements incrémentiels : seuls les fichiers modifiés sont chargés, ce qui améliore les performances
- Continuité entre appareils : expérience transparente lors du passage d’un appareil à l’autre
Détails d’implémentation
Les sections suivantes fournissent des exemples de code détaillés pour chaque étape :Étape 1 : initialiser Game Saves
Game Saves est conçu pour fonctionner aussi bien en ligne qu’hors connexion, ce qui le distingue des autres API PlayFab. Il conserve une identité d’utilisateur local persistante qui fonctionne même lorsque l’appareil démarre hors connexion.Concepts clés
- PFLocalUserHandle : un identificateur d’utilisateur persistant qui fonctionne hors connexion
- PFServiceConfigHandle : la configuration de votre titre PlayFab
- Conception hors connexion d’abord : le système fonctionne immédiatement, même sans connectivité Internet
Prérequis
Avant d’initialiser Game Saves, assurez-vous :- D’avoir appelé
XGameRuntimeInitialize()pour initialiser le runtime XBOX - D’avoir appelé
XUserAddAsync()pour connecter un utilisateur et obtenir unXUserHandle - De disposer de votre ID de titre PlayFab issu de Game Manager
Implémentation
Remplacez
<titleId> par votre ID de titre PlayFab réel, issu de Game Manager. Le xuserHandle doit être obtenu à partir d’un appel réussi à XUserAddAsync.Autres plateformes
Pour les plateformes sans authentification XBOX et sans prise en charge hors connexion, utilisez plutôt d’autres versions dePFLocalUserCreateHandle ou PFLocalUserCreateHandleWithPersistedLocalId. Consultez la documentation propre à chaque plateforme pour les détails d’implémentation.
Par exemple :
Étape 2 : synchroniser les données de sauvegarde depuis le cloud
Après l’initialisation, ajoutez l’utilisateur au système Game Saves pour synchroniser les données de sauvegarde existantes provenant d’autres appareils. Cette étape configure également le dossier racine de sauvegarde local dans lequel votre jeu lira et écrira les fichiers de sauvegarde.Quand effectuer cet appel
- Une fois par session de jeu, après l’authentification de l’utilisateur
- Lorsque l’utilisateur revient au menu principal du jeu
- Après une reprise depuis l’état suspendu/l’arrière-plan
Ce que fait cette étape
- Télécharge les sauvegardes existantes provenant d’autres appareils (uniquement les fichiers nouveaux ou modifiés)
- Conserve les horodatages des fichiers lorsque c’est possible, pour un contrôle de version correct
- Gère les conflits automatiquement grâce à l’interface utilisateur intégrée
- Définit l’appareil comme actif pour cet utilisateur
- Fournit le chemin du dossier de sauvegarde dans lequel votre jeu doit écrire les fichiers
Limitations importantes
- Ne peut être appelée avec succès qu’une seule fois par session Game Saves
- Nécessite la réinitialisation du système Game Saves pour être appelée de nouveau
- Déclenche des invites d’interface utilisateur en cas de conflits, de problèmes de stockage et de contention entre appareils
Implémentation
Étapes suivantes
Une fois cet appel terminé avec succès :- Votre jeu peut lire les fichiers de sauvegarde existants dans le répertoire
saveFolder - Écrire de nouveaux fichiers de sauvegarde et créer des sous-répertoires si nécessaire
- L’appareil est désormais considéré comme « actif » pour cet utilisateur
- Les autres appareils afficheront un avertissement si l’utilisateur tente d’y effectuer une synchronisation
Étape 3 : charger les données de sauvegarde dans le cloud
Une fois que votre jeu a écrit des fichiers et des sous-dossiers de sauvegarde dans le dossier racine de sauvegarde local, utilisez cette étape pour charger les modifications dans le cloud. Le système détecte automatiquement et charge uniquement les fichiers et sous-dossiers modifiés depuis le dernier chargement. Les suppressions de fichiers et de dossiers sont également synchronisées automatiquement dans le cloud.Moments suggérés pour le chargement
- Après une progression importante : lorsque le joueur atteint un point de contrôle ou termine un niveau
- Avant les transitions de menu : lors du retour au menu principal ou du changement de mode de jeu
- À la sortie du jeu : avant que le joueur quitte le jeu
- Sauvegardes périodiques : toutes les quelques minutes pendant les longues sessions de jeu
Options de chargement
KeepDeviceActive: l’appareil reste actif, ce qui permet d’autres chargements ultérieursReleaseDeviceAsActive: libère l’appareil de son statut actif, ce qui permet une synchronisation transparente sur d’autres appareils
Comportement selon la plateforme
- XBOX/Windows : le chargement se poursuit en arrière-plan après la fermeture du jeu
- Autres plateformes (Steam Deck, etc.) : le chargement doit se terminer avant la sortie du jeu, faute de quoi les données de sauvegarde n’atteindront pas le cloud
Implémentation
Quand puis-je écrire de nouveau dans le dossier de sauvegarde ?
Pendant le chargement, le système lit et compresse vos fichiers de sauvegarde locaux avant de les charger. Dès que l’état de synchronisation passe àUploading (signalé via PFGameSaveFilesUiProgressCallback), le système a fini de lire vos fichiers et vous pouvez de nouveau écrire dans le dossier de sauvegarde en toute sécurité. Vous n’avez pas besoin d’attendre la fin complète du chargement pour reprendre les sauvegardes.
Si vous n’utilisez pas le rappel de progression, attendez que le XAsyncBlock se termine avant d’écrire de nouvelles données de sauvegarde.
Bonnes pratiques
- Gérez les échecs de manière appropriée : les problèmes réseau ne doivent pas faire planter votre jeu
- Utilisez les options appropriées :
- Utilisez
KeepDeviceActivependant le jeu pour permettre d’autres chargements - Utilisez
ReleaseDeviceAsActivelorsque le joueur quitte le jeu ou revient au menu
- Utilisez
- Avertissez les utilisateurs sur les plateformes autres que XBOX : indiquez aux joueurs de ne pas quitter pendant le chargement
Considérations relatives à la fréquence
- Plusieurs chargements par session sont pris en charge et efficaces
- Seuls les fichiers modifiés sont chargés, ce qui limite l’utilisation de la bande passante
- Consultez la documentation sur les limites pour connaître les quotas et restrictions spécifiques
Étape 4 : gérer les rappels d’interface utilisateur (facultatif)
Game Saves fournit une interface utilisateur intégrée pour les plateformes XBOX et Windows. Sur les autres plateformes (comme le Steam Deck), votre jeu doit fournir sa propre interface utilisateur en gérant des rappels. Les rappels d’interface utilisateur se déclenchent pendantPFGameSaveFilesAddUserWithUiAsync et PFGameSaveFilesUploadWithUiAsync. Chaque rappel suspend l’opération asynchrone jusqu’à ce que votre jeu réponde : le rappel XAsyncBlock ne se déclenche pas tant que tous les rappels d’interface utilisateur ne sont pas résolus.
Comprendre les conflits de sauvegarde
Des conflits de sauvegarde se produisent lorsque les mêmes données de jeu ont été modifiées sur plusieurs appareils. Game Saves traite chaque sous-dossier de premier niveau comme une unité atomique pour la résolution des conflits, et les joueurs peuvent choisir de conserver soit les données locales, soit les données cloud en cas de conflit. Pour des scénarios détaillés de gestion des conflits et des bonnes pratiques, consultez Conflits de Game Saves.Comprendre le mode hors connexion de Game Saves
Game Saves fonctionne aussi bien en ligne qu’hors connexion. Lorsqu’il est connecté au cloud, toutes les API fonctionnent normalement. Hors connexion ou en cas de déconnexion, les sauvegardes locales continuent de fonctionner, mais les opérations cloud renvoientE_PF_GAMESAVE_DISCONNECTED_FROM_CLOUD.
Utilisez PFGameSaveFilesIsConnectedToCloud() pour vérifier l’état de la connexion et implémentez des rappels d’échec de synchronisation pour gérer correctement les problèmes réseau.
Pour des détails sur le comportement hors connexion et des bonnes pratiques, consultez Mode hors connexion de Game Saves.
