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

# Obtention de la présence d'un utilisateur

> Exemple en C plat XSAPI qui appelle XblPresenceGetPresenceAsync pour récupérer l'enregistrement de présence d'un utilisateur XBOX Live et lire les données d'état en ligne retournées.

Cette rubrique fournit un exemple de code pour obtenir la présence d'un utilisateur.

## Obtention de la présence d'un seul utilisateur

#### 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 XAsyncBlock*.
    HRESULT hr = XblPresenceGetPresenceResult(asyncBlock, &state.presenceRecord);

    // Be sure to call XblPresenceRecordCloseHandle when the presence record is no longer needed.
};

HRESULT hr = XblPresenceGetPresenceAsync(xboxLiveContext, xboxUserId, 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-CA/reference/system/xasync/structs/xasyncblock)
* [XblPresenceGetPresenceAsync](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencegetpresenceasync)
* [XblPresenceGetPresenceResult](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencegetpresenceresult)
* [XblPresenceRecordCloseHandle](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencerecordclosehandle)

## Obtention des chaînes de présence de plusieurs utilisateurs

#### 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 XAsyncBlock*.
    size_t resultCount{ 0 };
    HRESULT hr = XblPresenceGetPresenceForMultipleUsersResultCount(asyncBlock, &resultCount);

    if (SUCCEEDED(hr) && resultCount > 0)
    {
        std::vector<XblPresenceRecordHandle> handles(resultCount, nullptr);
        hr = XblPresenceGetPresenceForMultipleUsersResult(asyncBlock, handles.data(), resultCount);

        // Be sure to call XblPresenceRecordCloseHandle for each presence record when they're
        // no longer needed.
    }
};

std::vector<uint64_t> xuids{ 123, 456 };

// Filter results to only online users.
XblPresenceQueryFilters filters{};
filters.onlineOnly = true;

HRESULT hr = XblPresenceGetPresenceForMultipleUsersAsync(xboxLiveContext, xuids.data(), xuids.size(), &filters, 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-CA/reference/system/xasync/structs/xasyncblock)
* [XblPresenceGetPresenceForMultipleUsersAsync](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencegetpresenceformultipleusersasync)
* [XblPresenceGetPresenceForMultipleUsersResult](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencegetpresenceformultipleusersresult)
* [XblPresenceGetPresenceForMultipleUsersResultCount](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencegetpresenceformultipleusersresultcount)
* [XblPresenceQueryFilters](/fr-CA/reference/live/xsapi-c/presence_c/structs/xblpresencequeryfilters)
* [XblPresenceRecordCloseHandle](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencerecordclosehandle)

## Obtention de la présence d'un utilisateur à partir d'un groupe social

#### 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 XAsyncBlock*.
    size_t resultCount{ 0 };
    HRESULT hr = XblPresenceGetPresenceForSocialGroupResultCount(asyncBlock, &resultCount);

    if (SUCCEEDED(hr) && resultCount > 0)
    {
        std::vector<XblPresenceRecordHandle> handles(resultCount, nullptr);
        hr = XblPresenceGetPresenceForSocialGroupResult(asyncBlock, handles.data(), resultCount);

        // Be sure to call XblPresenceRecordCloseHandle for each presence record when they're
        // no longer needed.
    }

};

HRESULT hr = XblPresenceGetPresenceForSocialGroupAsync(xboxLiveContext, "Favorites", nullptr, nullptr, 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-CA/reference/system/xasync/structs/xasyncblock)
* [XblPresenceGetPresenceForSocialGroupAsync](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencegetpresenceforsocialgroupasync)
* [XblPresenceGetPresenceForSocialGroupResult](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencegetpresenceforsocialgroupresult)
* [XblPresenceGetPresenceForSocialGroupResultCount](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencegetpresenceforsocialgroupresultcount)
* [XblPresenceRecordCloseHandle](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencerecordclosehandle)

## Affichage de la présence d'un utilisateur

#### API C plate

```cpp theme={null}
const XblPresenceDeviceRecord* deviceRecords{ nullptr };
size_t deviceRecordsCount{ 0 };
HRESULT hr = XblPresenceRecordGetDeviceRecords(state.presenceRecord, &deviceRecords, &deviceRecordsCount);

for (auto i = 0u; i < deviceRecordsCount; ++i)
{
    auto& deviceRecord{ deviceRecords[i] };
    LogToFile("Got XblDeviceRecord with device type %u and %u title records", deviceRecord.deviceType, deviceRecord.titleRecordsCount);

    for (auto j = 0u; j < deviceRecord.titleRecordsCount; ++j)
    {
        auto& titleRecord{ deviceRecord.titleRecords[j] };
        // Display the Rich Presence string.
        LogToFile("Rich presence string for titleId %u: %s", titleRecord.titleId, titleRecord.richPresenceString);
    }
}
```

Pour plus d'informations, consultez les rubriques suivantes :

* [XblPresenceDeviceRecord](/fr-CA/reference/live/xsapi-c/presence_c/structs/xblpresencedevicerecord)
* [XblPresenceRecordGetDeviceRecords](/fr-CA/reference/live/xsapi-c/presence_c/functions/xblpresencerecordgetdevicerecords)


## Related topics

- [Exemple de code de présence enrichie](/fr-CA/services/xbox-services/community/presence/how-to/live-presence-howto-nav.md)
- [Procédures](/fr-CA/services/xbox-services/community/presence/how-to/index.md)
- [Mise à jour de la présence d'un utilisateur au moyen de XSAPI C](/fr-CA/services/xbox-services/community/presence/how-to/live-updating-user-presence.md)
- [Mise à jour de la présence d'un utilisateur au moyen de REST](/fr-CA/services/xbox-services/community/presence/how-to/live-updating-presence-rest.md)
- [Obtention de la liste des comptes supprimés depuis un service](/fr-CA/services/xbox-services/fundamentals/s2s-auth-calls/s2s-calls/s2s-call-patterns/live-get-deleted-accounts-list.md)
