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

# Información general sobre el administrador social

> Cómo la API del administrador social de los servicios XBOX simplifica el grafo social, usando la actividad en tiempo real para mantener actualizados los datos de amigos y presencia con llamadas sincrónicas.

En este tema se describe cómo la API del administrador social de los servicios XBOX simplifica el seguimiento de los amigos en línea y su actividad de juego.

Los servicios XBOX proporcionan un grafo social enriquecido que los títulos pueden usar para diversos escenarios.
Usar las API sociales de la API de servicios XBOX (XSAPI) para obtener y mantener información sobre un grafo social es complejo. Mantener esta información actualizada puede ser complicado.
No hacerlo correctamente puede provocar problemas de rendimiento, datos obsoletos o limitaciones de velocidad debido a que se llama a los servicios sociales de los servicios XBOX con más frecuencia de la necesaria.

El administrador social resuelve este problema haciendo lo siguiente:

* Crea una API sencilla a la que llamar.
* Crea información actualizada mediante el servicio de actividad en tiempo real (RTA) en segundo plano.
* Los desarrolladores pueden llamar a la API del administrador social de forma sincrónica sin ninguna sobrecarga adicional en el servicio.

El administrador social oculta la complejidad de tratar con varias suscripciones RTA y de actualizar los datos de los usuarios, y permitir que los desarrolladores obtengan fácilmente el grafo actualizado que desean crea escenarios interesantes.

Para obtener más información, consulte [Memoria y rendimiento del administrador social](/services/xbox-services/community/social-manager/concepts/live-socmgr-mem-perf).

## Características

El administrador social proporciona las siguientes características.

* API social simplificada
* Grafo social actualizado
* Control sobre el nivel de detalle de la información mostrada
* Número reducido de llamadas a los servicios XBOX
  * Esto se correlaciona directamente con la reducción general de la latencia en la adquisición de datos
* Seguridad para subprocesos
* Mantiene los datos actualizados de forma eficiente

## Conceptos básicos

**Grafo social**: se crea un *grafo social* para un usuario local en el dispositivo.
Esto crea una estructura que mantiene actualizada la información sobre todos los amigos de un usuario.

<Note>En Windows, solo puede haber un usuario local.</Note>

**Usuario social de XBOX**: un *usuario social de XBOX* es un conjunto completo de datos sociales asociados a un usuario de un grupo.

**Grupo de usuarios sociales de XBOX**: un grupo es una colección de usuarios que se usa para cosas como rellenar la interfaz de usuario.
Hay dos tipos de grupos:

* **Grupos de filtro**: un *grupo de filtro* toma el *grafo social* de un usuario local (que realiza la llamada) y devuelve un conjunto de usuarios siempre actualizado según los parámetros de filtro especificados.

* **Grupos de lista**: un *grupo de lista* toma una lista de usuarios y devuelve una vista siempre actualizada de esos usuarios. Estos usuarios pueden estar fuera de la lista de amigos de un usuario.

Para mantener actualizado un *grupo de usuarios sociales*, se debe llamar a la función [XblSocialManagerDoWork](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerdowork) en cada fotograma.

## Información general sobre la API

Las siguientes son las API clave que usará con más frecuencia.

### Agregar usuarios locales al administrador social

* Función de la API plana de C: [XblSocialManagerAddLocalUser](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanageraddlocaluser)

Agregar un usuario local al administrador social hace que se cree un *grafo social* para el usuario.
Después de agregar un usuario local, se pueden crear *grupos de usuarios sociales* para ese usuario.

El administrador social mantendrá actualizados los grupos de usuarios sociales de XBOX y puede filtrar los grupos de usuarios por presencia o por relación con el usuario.
Por ejemplo, se podría crear un grupo de usuarios sociales de XBOX que contenga todos los amigos del usuario que están en línea y jugando al título actual.
Este se mantendría actualizado a medida que los amigos empiecen o dejen de jugar al título.

### Grupo de usuarios sociales de XBOX

* Función de la API plana de C: [XblSocialManagerAddLocalUser](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanageraddlocaluser)

Un grupo de usuarios sociales de XBOX es un grupo de usuarios que cumplen determinados criterios, como se ha descrito anteriormente.
Los grupos de usuarios sociales de XBOX exponen qué tipo de grupo son, qué usuarios se están rastreando o cuál es su conjunto de filtros, y el usuario local al que pertenece el grupo.

Puede encontrar una descripción completa de las API del administrador social en la [referencia de la API de XBOX Live](https://aka.ms/xboxliveuwpdocs).
También puede encontrar las API en la documentación del prefijo `XblSocialManager`.

## Uso

### Creación de un grupo de usuarios sociales a partir de filtros

En este escenario, quiere una lista de usuarios a partir de un filtro, como una lista de los amigos de un usuario o el subconjunto de amigos que un usuario ha etiquetado como favoritos.

**API plana de C**

```cpp theme={null}
HRESULT hr = XblSocialManagerAddLocalUser(user, extraLevelDetail, nullptr);

XblPresenceFilter presenceFilter{ XblPresenceFilter::All };
XblRelationshipFilter relationshipFilter{ XblRelationshipFilter::Friends };

XblSocialManagerUserGroupHandle groupHandle{ nullptr };
HRESULT hr = XblSocialManagerCreateSocialUserGroupFromFilters(user, presenceFilter, relationshipFilter, &groupHandle);

if (SUCCEEDED(hr))
{
    state.groups.insert(groupHandle);
}

// Some update loop in the game.
while (true)
{
    const XblSocialManagerEvent* events{ nullptr };
    size_t eventCount{ 0 };
    HRESULT hr = XblSocialManagerDoWork(&events, &eventCount);
    if (SUCCEEDED(hr))
    {
        for (size_t i = 0; i < eventCount; i++)
        {
            // Act on the event.
        }
    }
}
```

Para obtener más información, consulte lo siguiente:

* [XblPresenceFilter](/reference/live/xsapi-c/social_manager_c/enums/xblpresencefilter)
* [XblRelationshipFilter](/reference/live/xsapi-c/social_manager_c/enums/xblrelationshipfilter)
* [XblSocialManagerAddLocalUser](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanageraddlocaluser)
* [XblSocialManagerCreateSocialUserGroupFromFilters](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagercreatesocialusergroupfromfilters)
* [XblSocialManagerDoWork](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerdowork)
* [XblSocialManagerEvent](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanagerevent)

#### Eventos devueltos

**Usuario local agregado**: se desencadena cuando se completa la carga del grafo social de un usuario. Indica si se produjo algún error durante la inicialización.

* API plana de C: [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::LocalUserAdded`

**Grupo de usuarios sociales cargado**: se desencadena cuando se ha creado un grupo de usuarios sociales.

* API plana de C: [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::SocialUserGroupLoaded`

**Usuarios agregados al grafo social**: se desencadena cuando se cargan los usuarios.

* API plana de C: [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::UsersAddedToSocialGraph`

Para obtener más información, consulte lo siguiente:

* [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype) (API plana de C)

#### Detalles adicionales

**API plana de C**
El ejemplo anterior muestra cómo inicializar el administrador social para un usuario, crear un grupo de usuarios sociales para ese usuario y mantenerlo actualizado.

Las opciones de filtrado son las enumeraciones [XblPresenceFilter](/reference/live/xsapi-c/social_manager_c/enums/xblpresencefilter) y [XblRelationshipFilter](/reference/live/xsapi-c/social_manager_c/enums/xblrelationshipfilter).

En el bucle del juego, la función [XblSocialManagerDoWork](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerdowork) actualiza todas las vistas creadas con la instantánea más reciente de los usuarios de ese grupo.

Los usuarios de la vista pueden obtenerse llamando a la función [XblSocialManagerUserGroupGetUsers](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerusergroupgetusers). Esta devuelve un `XblSocialManagerUserPtrArray`, una matriz de objetos [XblSocialManagerUser](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanageruser) que pertenecen a XSAPI.
[XblSocialManagerUser](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanageruser) contiene la información social, como el gamertag, la imagen de jugador y el URI.

### Creación y actualización de un grupo de usuarios sociales a partir de una lista

En este escenario, quiere la información social de una lista de usuarios, como los usuarios de una sesión multijugador.

**API plana de C**

```cpp theme={null}
HRESULT hr = XblSocialManagerAddLocalUser(user, extraLevelDetail, nullptr);

// List of xuids to track.
std::vector<uint64_t> xuids
{
    listXuids.begin() + static_cast<int>(offset),
    listXuids.begin() + static_cast<int>(offset + count) 
}; 

XblSocialManagerUserGroupHandle groupHandle{ nullptr };
HRESULT hr = XblSocialManagerCreateSocialUserGroupFromList(user, xuids.data(), xuids.size(), &groupHandle);

if (SUCCEEDED(hr))
{
    state.groups.insert(groupHandle);
}

// Some update loop in the game.
while (true)
{
    const XblSocialManagerEvent* events{ nullptr };
    size_t eventCount{ 0 };
    HRESULT hr = XblSocialManagerDoWork(&events, &eventCount);
    if (SUCCEEDED(hr))
    {
        for (size_t i = 0; i < eventCount; i++)
        {
            // Act on the event
        }
    }
}
```

Para obtener más información, consulte lo siguiente:

* [XblSocialManagerAddLocalUser](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanageraddlocaluser)
* [XblSocialManagerCreateSocialUserGroupFromList](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagercreatesocialusergroupfromlist)
* [XblSocialManagerDoWork](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerdowork)
* [XblSocialManagerEvent](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanagerevent)

#### Eventos devueltos

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::LocalUserAdded`. Se desencadena cuando se completa la carga del grafo social del usuario. Indica si se produjo algún error durante la inicialización.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::SocialUserGroupLoaded`. Se desencadena cuando se ha creado un grupo de usuarios sociales y los usuarios rastreados se han agregado al grafo social.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::UsersAddedToSocialGraph`. Se desencadena cuando se cargan los usuarios.

### Actualización de un grupo de usuarios sociales a partir de una lista

También puede cambiar la lista de usuarios rastreados en el grupo de usuarios sociales llamando a [XblSocialManagerUpdateSocialUserGroup](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerupdatesocialusergroup).

**API plana de C**

```cpp theme={null}
// New list of xuids to track.
std::vector<uint64_t> xuids
{ 
    listXuids.begin() + static_cast<int>(offset),
    listXuids.begin() + static_cast<int>(offset + count)
};

HRESULT hr = XblSocialManagerUpdateSocialUserGroup(group, xuids.data(), xuids.size());

// Some update loop in the game.
while (true)
{
    const XblSocialManagerEvent* events{ nullptr };
    size_t eventCount{ 0 };
    HRESULT hr = XblSocialManagerDoWork(&events, &eventCount);
    if (SUCCEEDED(hr))
    {
        for (size_t i = 0; i < eventCount; i++)
        {
            // Act on the event.
        }
    }
}
```

Para obtener más información, consulte lo siguiente:

* [XblSocialManagerDoWork](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerdowork)
* [XblSocialManagerEvent](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanagerevent)
* [XblSocialManagerUpdateSocialUserGroup](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerupdatesocialusergroup)

#### Eventos devueltos

**Grupo de usuarios sociales actualizado**: se desencadena cuando se completa la actualización del grupo de usuarios sociales.

* C++: `social_user_group_updated`
* C: [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)::SocialUserGroupUpdated

**Usuarios agregados al grafo social**: se desencadena cuando se cargan los usuarios. Si los usuarios agregados mediante la lista ya están en el grafo, este evento no se desencadena.

* C++: `users_added_to_social_graph`
* C: [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)::UsersAddedToSocialGraph

**Usuarios eliminados del grafo social**: se desencadena cuando los usuarios anteriores se eliminan del grafo social.

* C: [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)::UsersRemovedFromSocialGraph

### Uso de los eventos del administrador social

El administrador social le indica lo que ha ocurrido, en forma de eventos.
Puede usar esos eventos para actualizar la interfaz de usuario o realizar otra lógica.

**API plana de C**

```cpp theme={null}
// Some update loop in the game.
while (true)
{
    const XblSocialManagerEvent* events{ nullptr };
    size_t eventCount{ 0 };
    HRESULT hr = XblSocialManagerDoWork(&events, &eventCount);
    if (SUCCEEDED(hr))
    {
        for (size_t i = 0; i < eventCount; i++)
        {
            // Act on the event.
            auto& socialEvent = events[i];
            std::stringstream ss;
            ss << "XblSocialManagerDoWork: Event of type " << eventTypesMap[socialEvent.eventType] << std::endl;
            for (uint32_t i = 0; i < XBL_SOCIAL_MANAGER_MAX_AFFECTED_USERS_PER_EVENT; i++)
            {
                if (socialEvent.usersAffected[i] != nullptr)
                {
                    if (i == 0)
                    {
                        ss << "Users affected: " << std::endl;
                    }
                    ss << "\t" << socialEvent.usersAffected[i]->gamertag << std::endl;
                }
            }
            LogToFile(ss.str().c_str());
        }
    }
}
```

Para obtener más información, consulte lo siguiente:

* [XblSocialManagerDoWork](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerdowork)
* [XblSocialManagerEvent](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanagerevent)

#### Eventos devueltos

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::LocalUserAdded`. Se desencadena cuando se completa la carga del grafo social de un usuario. Indica si se produjo algún error durante la inicialización.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::SocialUserGroupLoaded`. Se desencadena cuando se ha creado un grupo de usuarios sociales.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::UsersAddedToSocialGraph`. Se desencadena cuando se cargan los usuarios.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::UsersRemovedFromSocialGraph`. Se desencadena cuando un usuario se elimina del grafo social.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::PresenceChanged`. Se desencadena cuando cambia la presencia de un usuario en el grafo social.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::ProfilesChanged`. Se desencadena cuando cambia el perfil de un usuario en el grafo social.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::SocialRelationshipsChanged`. Se desencadena cuando cambia la relación entre el usuario local y otro usuario en el grafo social.

[XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::SocialUserGroupUpdated`. Se desencadena cuando se completa una actualización de un grupo de usuarios sociales.

#### Detalles adicionales

Este ejemplo muestra parte del control adicional que ofrece el administrador social.

En lugar de depender de los filtros del grupo de usuarios sociales para proporcionar una lista de usuarios actualizada durante el bucle del juego, el grafo social se inicializa fuera del bucle del juego.
El título depende entonces de los *eventos* que devuelve la función [XblSocialManagerDoWork](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerdowork).

*Events* es una lista de [XblSocialManagerEvent](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanagerevent). Cada [XblSocialManagerEvent](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanagerevent) contiene un cambio en el grafo social que se produjo durante el último fotograma.
Por ejemplo, [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::ProfilesChanged` y [XblSocialManagerEventType](/reference/live/xsapi-c/social_manager_c/enums/xblsocialmanagereventtype)`::UsersAddedToSocialGraph`.

Para obtener más información, consulte la documentación de la API [XblSocialManagerEvent](/reference/live/xsapi-c/social_manager_c/structs/xblsocialmanagerevent).

### Limpieza

#### Limpieza de grupos de usuarios sociales

El ejemplo siguiente limpia el grupo de usuarios sociales que se creó.
El autor de la llamada también debe eliminar cualquier referencia que tenga a cualquier grupo de usuarios sociales creado, ya que ahora no es válido.

**API plana de C**

```cpp theme={null}
HRESULT hr = XblSocialManagerDestroySocialUserGroup(groupHandle);
if (SUCCEEDED(hr))
{
    state.groups.erase(groupHandle);
}
```

Para obtener más información, consulte lo siguiente:

* [XblSocialManagerDestroySocialUserGroup](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerdestroysocialusergroup)

#### Limpieza de usuarios locales

Como se muestra en el ejemplo siguiente, eliminar un usuario local elimina el grafo social del usuario cargado y todos los grupos de usuarios sociales que se crearon con ese usuario.

Con la API plana de C, no se reciben más eventos para el usuario eliminado.

**API plana de C**

```cpp theme={null}
HRESULT hr = XblSocialManagerRemoveLocalUser(user);
```

Para obtener más información, consulte lo siguiente:

* [XblSocialManagerRemoveLocalUser](/reference/live/xsapi-c/social_manager_c/functions/xblsocialmanagerremovelocaluser)


## Related topics

- [Administrador social](/es/services/xbox-services/community/social-manager/live-social-manager-nav.md)
- [Información general sobre el enlace de juegos](/es/services/xbox-services/fundamentals/game-binding/game-binding-overview.md)
- [Información general sobre el audio](/es/build/console-features/audio/overviews/audio.md)
- [Información general sobre el multijugador de los servicios de XBOX](/es/services/xbox-services/multiplayer/overviews/live-multiplayer-intro.md)
- [Información general sobre el sonido espacial](/es/build/console-features/audio/overviews/spatial-audio-overview.md)
