> ## 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 início rápido para criar listas de amigos do PlayFab no Unity, abordando como adicionar, remover e exibir amigos, além de vincular amigos do Steam, Facebook e XBOX.

As listas de amigos são um ótimo recurso para melhorar a capacidade de socialização dos seus jogadores. Elas são fáceis de usar e podem tornar os placares de líderes mais envolventes para os seus usuários.

## Pré-requisitos

### SDK: Unity

* A ID do título está definida no objeto `PlayFabSharedSettings`.
* O projeto consegue conectar um usuário com sucesso.
* O título tem pelo menos dois usuários registrados.

## Sobre amigos

Qualquer jogador do seu título pode ser amigo de qualquer outro jogador do seu título. Notavelmente, a amizade no PlayFab é uma via de mão única.

Se **Albert** adicionar **Bob** como amigo, *não* há processo de aprovação para **Bob**.  Na verdade, **Bob** pode nem saber.

**Bob** precisa adicionar **Albert** separadamente para que a amizade seja *mútua*. Se você quiser ter regras de reciprocidade, é responsabilidade do seu título impor essas condições com um servidor de jogo personalizado ou com lógica do CloudScript, se necessário.

Caso um jogador tenha vinculado sua conta Steam, Facebook ou XBOX Live, os amigos específicos da plataforma também podem ser exibidos, se esses amigos também jogarem o seu título.

## Fazendo amigos

O código de exemplo usa as funções `DisplayFriends()` e `DisplayError(string error)` como substitutas da interface do usuário do seu aplicativo. Você pode colá-las no seu editor para fazer funcionar sem nenhum esforço extra, ou substituir as chamadas pelo seu próprio 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. Depois que um jogador entra, ele pode acessar a interface de amigos. A funcionalidade geralmente inclui, no mínimo, adicionar, remover e exibir amigos.
2. Para obter a lista de amigos atual do jogador, use a chamada 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);
}
```

O resultado de [GetFriendsList](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist) contém um parâmetro friends, que é uma lista de objetos [FriendInfo](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist#friendinfo).

3. Para adicionar um amigo à lista de amigos do jogador, use a chamada 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 remover um jogador da lista de amigos de um jogador, use a chamada 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);
}
```

## Indo além

Há outras coisas que você pode fazer com amigos além de adicionar, remover e exibir.

### Marcando amigos

O objeto [FriendInfo](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist#friendinfo), obtido de [GetFriendsList](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist), inclui uma lista de marcas do amigo. Ao atualizar a lista, você deve adicionar e remover itens dessa lista e incluí-la na chamada de API (conforme mostrado abaixo).

```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);
}
```

Você pode usar marcas para orientar o matchmaking (por exemplo, o jogador não gosta de jogar com amigos marcados como **2tuff** na dificuldade difícil), implementar grupos de amigos ou simplesmente usá-las para armazenar quaisquer metadados associados a um relacionamento de que você precise.

Uma observação importante é que, atualmente, o PlayFab não indexa essas marcas de forma alguma. [GetFriendsList](xref:titleid.playfabapi.com.client.friendlistmanagement.getfriendslist) não consegue filtrar com base nelas, portanto isso deve ser feito localmente.

Tenha isso em mente ao considerar quaisquer implicações de desempenho decorrentes desse sistema.


## Related topics

- [Requisitos do XBOX](/pt-BR/services/playfab/multiplayer/networking/xbox-requirements.md)
- [Convites do PlayFab Party e o modelo de segurança](/pt-BR/services/playfab/multiplayer/networking/concepts-invitations-security-model.md)
- [Amigos](/pt-BR/services/playfab/community/associations/friends/index.md)
- [XR070 Lista de amigos](/pt-BR/publishing/certification/fma/xr-070.md)
- [Obter lista de amigos](/pt-BR/services/playfab/api-references/rest/client/friend-list-management/get-friends-list.md)
