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

# Listas de amigos

> Tutorial de inicio rápido para crear listas de amigos de PlayFab en Unity, que explica cómo agregar, quitar y mostrar amigos, además de vincular amigos de Steam, Facebook y XBOX.

Las listas de amigos son una excelente característica para mejorar la capacidad de socialización de sus jugadores. Es fácil trabajar con ellas y pueden hacer que las tablas de clasificación resulten más atractivas para sus usuarios.

## Requisitos previos

### SDK: Unity

* El id. de título está establecido en el objeto `PlayFabSharedSettings`.
* El proyecto puede iniciar la sesión de un usuario correctamente.
* El título tiene al menos dos usuarios registrados.

## Acerca de los amigos

Cualquier jugador de su título puede ser amigo de cualquier otro jugador de su título. Cabe destacar que la amistad en PlayFab es unidireccional.

Si **Albert** agrega a **Bob** como amigo, *no* hay ningún proceso de aprobación para **Bob**. De hecho, es posible que **Bob** no lo sepa.

**Bob** debe agregar a **Albert** por separado para que la amistad sea *mutua*. Si desea tener reglas de reciprocidad, es responsabilidad de su título aplicar estas condiciones con un servidor de juego personalizado o lógica de CloudScript, si es necesario.

En caso de que un jugador haya vinculado su cuenta de Steam, Facebook o XBOX Live, también pueden mostrarse sus amigos específicos de la plataforma, si esos amigos también juegan a su título.

## Hacer amigos

El código de ejemplo usa las funciones `DisplayFriends()` y `DisplayError(string error)` como sustituto de la interfaz de usuario de su aplicación. Puede pegarlas en su editor para que funcione sin ningún esfuerzo adicional, o reemplazar las llamadas por su propio código.

```csharp theme={null}
void DisplayFriends(List<FriendInfo> friendsCache) { friendsCache.ForEach(f => Debug.Log(f.FriendPlayFabId)); }
void DisplayPlayFabError(PlayFabError error) { Debug.Log(error.GenerateErrorReport()); }
void DisplayError(string error) { Debug.LogError(error); }
```

1. Una vez que un jugador inicia sesión, puede acceder a la interfaz de usuario de amigos. La funcionalidad suele incluir, como mínimo, agregar, quitar y mostrar amigos.
2. Para obtener la lista de amigos actual del jugador, use la llamada de API [GetFriendsList](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist).

```csharp theme={null}
List<FriendInfo> _friends = null;

void GetFriends() {
    PlayFabClientAPI.GetFriendsList(new GetFriendsListRequest {
        IncludeSteamFriends = false,
        IncludeFacebookFriends = false,
        XboxToken = null
    }, result => {
        _friends = result.Friends;
        DisplayFriends(_friends); // triggers your UI
    }, DisplayPlayFabError);
}
```

El resultado de [GetFriendsList](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist) contiene un parámetro friends, que es una lista de objetos [FriendInfo](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist#friendinfo).

3. Para agregar un amigo a la lista de amigos del jugador, use la llamada de API [AddFriend](xref:titleid.playfabapi.com.client.friendlistmanagement.addfriend).

```csharp theme={null}
enum FriendIdType { PlayFabId, Username, Email, DisplayName };

void AddFriend(FriendIdType idType, string friendId) {
    var request = new AddFriendRequest();
    switch (idType) {
        case FriendIdType.PlayFabId:
            request.FriendPlayFabId = friendId;
            break;
        case FriendIdType.Username:
            request.FriendUsername = friendId;
            break;
        case FriendIdType.Email:
            request.FriendEmail = friendId;
            break;
        case FriendIdType.DisplayName:
            request.FriendTitleDisplayName = friendId;
            break;
    }
    // Execute request and update friends when we are done
    PlayFabClientAPI.AddFriend(request, result => {
        Debug.Log("Friend added successfully!");
    }, DisplayPlayFabError);
}
```

4. Para quitar a un jugador de la lista de amigos de un jugador, use la llamada de API [RemoveFriend](xref:titleid.playfabapi.com.client.friendlistmanagement.removefriend).

```csharp theme={null}
// unlike AddFriend, RemoveFriend only takes a PlayFab ID
// you can get this from the FriendInfo object under FriendPlayFabId
void RemoveFriend(FriendInfo friendInfo) {
    PlayFabClientAPI.RemoveFriend(new RemoveFriendRequest {
        FriendPlayFabId = friendInfo.FriendPlayFabId
    }, result => {
        _friends.Remove(friendInfo);
    }, DisplayPlayFabError);
}
```

## Ir más allá

Hay otras cosas que puede hacer con los amigos además de agregarlos, quitarlos y mostrarlos.

### Etiquetar amigos

El objeto [FriendInfo](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist#friendinfo), recuperado de [GetFriendsList](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist), incluye una lista de etiquetas para el amigo. Al actualizar la lista, conviene agregar y quitar elementos de esta lista e incluirla en la llamada de API (como se muestra a continuación).

```csharp theme={null}
// this REPLACES the list of tags on the server
// for updates, make sure this includes the original tag list
void SetFriendTags(FriendInfo friend, List<string> newTags)
{
    // update the tags with the edited list
    PlayFabClientAPI.SetFriendTags(new SetFriendTagsRequest
    {
        FriendPlayFabId = friend.FriendPlayFabId,
        Tags = newTags
    }, tagresult => {
        // Make sure to save new tags locally. That way you do not have to hard-update friendlist
        friend.Tags = newTags;
    }, DisplayPlayFabError);
}
```

Puede usar las etiquetas para orientar el emparejamiento (por ejemplo, al jugador no le gusta jugar con amigos etiquetados como **2tuff** en dificultad alta), implementar grupos de amigos, o simplemente usarlas para almacenar cualquier metadato asociado a una relación que necesite.

Una nota importante es que PlayFab actualmente no indexa estas etiquetas de ninguna manera. [GetFriendsList](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist) no puede filtrar en función de ellas, por lo que debe hacerse localmente.

Tenga esto en cuenta al considerar cualquier implicación de rendimiento derivada de este sistema.
