> ## 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.

# Mettre à jour les succès gérés par le titre

> Exemple de code XSAPI montrant comment déverrouiller un succès XBOX Live géré par le titre ou signaler la progression de son achèvement avec XblAchievementsUpdateAchievementAsync.

<a id="top" />

Cette rubrique couvre les points suivants :

* [Déverrouiller un succès](#unlocking-an-achievement)
* [Mettre à jour la progression de l'achèvement d'un succès](#updating-an-achievement)

<a id="unlocking-an-achievement" />

## Déverrouiller un succès

Une fois vos succès configurés via Partner Center et publiés dans votre bac à sable de développement, votre titre peut les déverrouiller en appelant l'API [XblAchievementsUpdateAchievementAsync](/fr/reference/live/xsapi-c/achievements_c/functions/xblachievementsupdateachievementasync).
Pour plus d'informations, consultez l'exemple de code de la section suivante.

Pour déverrouiller un succès, définissez `percentComplete` sur 100.
Si l'utilisateur est en ligne, la demande est immédiatement envoyée au service Achievements des services XBOX et déclenche les expériences utilisateur suivantes.

* L'utilisateur reçoit une notification de succès déverrouillé.
* Le succès spécifié apparaît comme déverrouillé dans la liste des succès de l'utilisateur pour le titre.
* Le succès déverrouillé est ajouté au flux d'activité de l'utilisateur.

<Note>L'expérience utilisateur est visuellement identique pour les succès, qu'ils utilisent les succès basés sur les événements ou les succès gérés par le titre.</Note>

Si l'utilisateur est hors connexion, la demande de déverrouillage est mise en file d'attente localement sur l'appareil de l'utilisateur.
Lorsque la connectivité réseau est rétablie, la demande est automatiquement envoyée au service Achievements (aucune action du jeu n'est nécessaire pour la déclencher), et les expériences utilisateur précédentes se produisent comme décrit.

<a id="updating-an-achievement" />

## Mettre à jour la progression de l'achèvement d'un succès

Pour mettre à jour la progression d'un utilisateur vers le déverrouillage d'un succès, appelez [XblAchievementsUpdateAchievementAsync](/fr/reference/live/xsapi-c/achievements_c/functions/xblachievementsupdateachievementasync). Définissez l'argument `percentComplete` sur un nombre entier compris entre 1 et 100.
Pour plus d'informations, consultez l'exemple de code suivant.

La progression d'un succès ne peut qu'augmenter.
Si `percentComplete` est défini sur un nombre inférieur à la dernière valeur `percentComplete` du succès, la mise à jour est ignorée.
Par exemple, si la valeur `percentComplete` du succès avait précédemment été définie sur 75, l'envoi d'une mise à jour avec une valeur de 25 est ignoré. Le succès reste affiché comme achevé à 75 pour cent.

Si `percentComplete` est défini sur 100, le succès est déverrouillé.

Si `percentComplete` est défini sur un nombre supérieur à 100, l'API se comporte comme si vous aviez défini le nombre sur exactement 100.

### Mettre à jour les succès du titre actuel

Vous pouvez mettre à jour les succès du titre actuel en appelant [XblAchievementsUpdateAchievementAsync](/fr/reference/live/xsapi-c/achievements_c/functions/xblachievementsupdateachievementasync), comme suit.

**API C plate**

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.
    auto result = XAsyncGetStatus(asyncBlock, false);
    if (SUCCEEDED(result))
    {
        // The achievement was updated.
    }
    else if (result == HTTP_E_STATUS_NOT_MODIFIED)
    {
        // The achievement wasn't updated.
    }
    else
    {
        // The achievement failed to update.
    }
};

HRESULT hr = XblAchievementsUpdateAchievementAsync(
    xboxLiveContext,
    xboxUserId,
    achievementId.c_str(),
    percentComplete,
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release();
}
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock)
* [XAsyncGetStatus](/fr/reference/system/xasync/functions/xasyncgetstatus)
* [XblAchievementsUpdateAchievementAsync](/fr/reference/live/xsapi-c/achievements_c/functions/xblachievementsupdateachievementasync)

### Mettre à jour les succès d'un autre titre

Vous pouvez mettre à jour les succès d'un autre `titleId` à l'aide de [XblAchievementsUpdateAchievementForTitleIdAsync](/fr/reference/live/xsapi-c/achievements_c/functions/xblachievementsupdateachievementfortitleidasync), comme suit.

**API C plate**

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of the XAsyncBlock*.
    auto result = XAsyncGetStatus(asyncBlock, false);
    if (SUCCEEDED(result))
    {
        // The achievement was updated.
    }
    else if (result == HTTP_E_STATUS_NOT_MODIFIED)
    {
        // The achievement wasn't updated.
    }
    else
    {
        // The achievement failed to update.
    }
};

HRESULT hr = XblAchievementsUpdateAchievementForTitleIdAsync(
    xboxLiveContext,
    xboxUserId,
    titleId,
    scid,
    achievementId.c_str(),
    percentComplete,
    asyncBlock.get()
);
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release();
}
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XAsyncBlock](/fr/reference/system/xasync/structs/xasyncblock)
* [XAsyncGetStatus](/fr/reference/system/xasync/functions/xasyncgetstatus)
* [XblAchievementsUpdateAchievementForTitleIdAsync](/fr/reference/live/xsapi-c/achievements_c/functions/xblachievementsupdateachievementfortitleidasync)

[Retour en haut de cette rubrique.](#top)


## Related topics

- [Exemples de code pour les succès gérés par le titre](/fr/services/xbox-services/player-data/achievements/title-managed/how-to/live-achievements-howto-nav.md)
- [Procédures](/fr/services/xbox-services/player-data/achievements/title-managed/how-to/index.md)
- [Succès basés sur les événements et succès gérés par le titre](/fr/services/xbox-services/player-data/achievements/live-achievements-eb-vs-tm.md)
- [Configurer les succès gérés par le titre dans Partner Center](/fr/services/xbox-services/player-data/achievements/title-managed/config/live-achievements-tm-config.md)
- [Succès gérés par le titre](/fr/services/xbox-services/player-data/achievements/title-managed/live-achievements-tm-nav.md)
