Skip to content

Friends System

The GameFuse Friends System allows you to implement social features in your game, such as sending friend requests, accepting or declining requests, and managing a friends list.

Getting Started with Friends

To use the GameFuse Friends system, you'll need to access the UGameFuseFriends subsystem:

UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

Sending Friend Requests

You can send a friend request to another user by their username:

C++ Example

void UMyGameMode::SendFriendRequest(const FString& Username)
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendRequestCallback OnSendFriendRequest;
    OnSendFriendRequest.BindLambda([this](const FGFFriendRequest& Request) {
        UE_LOG(LogTemp, Display, TEXT("Friend request sent successfully"));
        UE_LOG(LogTemp, Display, TEXT("Friendship ID: %d"), Request.FriendshipId);
        UE_LOG(LogTemp, Display, TEXT("Other User: %s"), *Request.OtherUser.Username);
    });

    // Send the friend request
    FriendsSystem->SendFriendRequest(Username, OnSendFriendRequest);
}

Accepting Friend Requests

When someone sends you a friend request, you can accept it:

C++ Example

void UMyGameMode::AcceptFriendRequest(int32 FriendshipId)
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendActionCallback OnAcceptFriendRequest;
    OnAcceptFriendRequest.BindLambda([this, FriendshipId](bool bSuccess) {
        if (bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Friend request accepted successfully"));
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to accept friend request"));
        }
    });

    // Accept the friend request
    FriendsSystem->AcceptFriendRequest(FriendshipId, OnAcceptFriendRequest);
}

Declining Friend Requests

You can also decline a friend request:

C++ Example

void UMyGameMode::DeclineFriendRequest(int32 FriendshipId)
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendActionCallback OnDeclineFriendRequest;
    OnDeclineFriendRequest.BindLambda([this, FriendshipId](bool bSuccess) {
        if (bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Friend request declined successfully"));
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to decline friend request"));
        }
    });

    // Decline the friend request
    FriendsSystem->DeclineFriendRequest(FriendshipId, OnDeclineFriendRequest);
}

Canceling Friend Requests

If you've sent a friend request and want to cancel it:

C++ Example

void UMyGameMode::CancelFriendRequest(int32 FriendshipId)
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendActionCallback OnCancelFriendRequest;
    OnCancelFriendRequest.BindLambda([this, FriendshipId](bool bSuccess) {
        if (bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Friend request canceled successfully"));
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to cancel friend request"));
        }
    });

    // Cancel the friend request
    FriendsSystem->CancelFriendRequest(FriendshipId, OnCancelFriendRequest);
}

Unfriending Players

You can remove a user from your friends list:

C++ Example

void UMyGameMode::UnfriendPlayer(int32 UserId)
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendActionCallback OnUnfriendPlayer;
    OnUnfriendPlayer.BindLambda([this, UserId](bool bSuccess) {
        if (bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Player unfriended successfully"));
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to unfriend player"));
        }
    });

    // Unfriend the player
    FriendsSystem->UnfriendPlayer(UserId, OnUnfriendPlayer);
}

Fetching Friendship Data

You can fetch all friendship data for the current user:

C++ Example

void UMyGameMode::FetchFriendshipData()
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendsCallback OnFetchFriendshipData;
    OnFetchFriendshipData.BindLambda([this](const TArray<FGFUserData>& FriendsList) {
        UE_LOG(LogTemp, Display, TEXT("Fetched %d friends"), FriendsList.Num());

        for (const FGFUserData& Friend : FriendsList)
        {
            UE_LOG(LogTemp, Display, TEXT("Friend: %s (ID: %d)"), *Friend.Username, Friend.Id);
        }
    });

    // Fetch friendship data
    FriendsSystem->FetchFriendshipData(OnFetchFriendshipData);
}

Fetching Friends Lists

Fetching Current User's Friends List

C++ Example

void UMyGameMode::FetchMyFriendsList()
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendsCallback OnFetchFriendsList;
    OnFetchFriendsList.BindLambda([this](const TArray<FGFUserData>& Friends) {
        UE_LOG(LogTemp, Display, TEXT("Fetched %d friends"), Friends.Num());

        for (const FGFUserData& Friend : Friends)
        {
            UE_LOG(LogTemp, Display, TEXT("Friend: %s (ID: %d)"), *Friend.Username, Friend.Id);
        }
    });

    // Fetch friends list
    FriendsSystem->FetchMyFriendsList(OnFetchFriendsList);
}

Fetching Other Users' Friends Lists

C++ Example

void UMyGameMode::FetchUserFriendsList(int32 UserId)
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendsCallback OnFetchUserFriendsList;
    OnFetchUserFriendsList.BindLambda([this](const TArray<FGFUserData>& Friends) {
        UE_LOG(LogTemp, Display, TEXT("Fetched %d friends for user"), Friends.Num());

        for (const FGFUserData& Friend : Friends)
        {
            UE_LOG(LogTemp, Display, TEXT("Friend: %s (ID: %d)"), *Friend.Username, Friend.Id);
        }
    });

    // Fetch user's friends list
    FriendsSystem->FetchUserFriendsList(UserId, OnFetchUserFriendsList);
}

Fetching Friend Requests

Fetching Outgoing Friend Requests

C++ Example

void UMyGameMode::FetchOutgoingFriendRequests()
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendRequestsCallback OnFetchOutgoingRequests;
    OnFetchOutgoingRequests.BindLambda([this](const TArray<FGFFriendRequest>& Requests) {
        UE_LOG(LogTemp, Display, TEXT("Fetched %d outgoing friend requests"), Requests.Num());

        for (const FGFFriendRequest& Request : Requests)
        {
            UE_LOG(LogTemp, Display, TEXT("Outgoing request to: %s (ID: %d)"), 
                *Request.OtherUser.Username, Request.FriendshipId);
        }
    });

    // Fetch outgoing friend requests
    FriendsSystem->FetchOutgoingFriendRequests(OnFetchOutgoingRequests);
}

Fetching Incoming Friend Requests

C++ Example

void UMyGameMode::FetchIncomingFriendRequests()
{
    UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

    // Create typed callback
    FGFFriendRequestsCallback OnFetchIncomingRequests;
    OnFetchIncomingRequests.BindLambda([this](const TArray<FGFFriendRequest>& Requests) {
        UE_LOG(LogTemp, Display, TEXT("Fetched %d incoming friend requests"), Requests.Num());

        for (const FGFFriendRequest& Request : Requests)
        {
            UE_LOG(LogTemp, Display, TEXT("Incoming request from: %s (ID: %d)"), 
                *Request.OtherUser.Username, Request.FriendshipId);
        }
    });

    // Fetch incoming friend requests
    FriendsSystem->FetchIncomingFriendRequests(OnFetchIncomingRequests);
}

Function Parameters

Friend Request Operations

Parameter Type Description
Username FString The username to send friend request to
FriendshipId int32 The ID of the friendship request
UserId int32 The ID of the user to unfriend
Callback Various callback types Callback function to handle the response

Fetching Friends Lists

Parameter Type Description
UserId int32 The user ID to fetch friends for (optional, for user-specific fetch)
Callback FGFFriendsCallback / FBP_GFApiCallback Callback function to handle the response

Function Return Values

Friend Request Operations

HTTP status code Description
200 OK - Operation successful
400 Bad request - Invalid parameters
401 Unauthorized - User not signed in
404 User not found
409 Friend request already exists
500 Unknown server error

Fetching Friends Lists

HTTP status code Description
200 OK - Friends list fetched successfully
401 Unauthorized - User not signed in
404 User not found (for user-specific fetch)
500 Unknown server error

Cached Data Access

You can access cached friends data without making API calls:

UGameFuseFriends* FriendsSystem = GetGameInstance()->GetSubsystem<UGameFuseFriends>();

// Get cached friends list
const TArray<FGFUserData>& FriendsList = FriendsSystem->GetFriendsList();

// Get cached outgoing requests
const TArray<FGFFriendRequest>& OutgoingRequests = FriendsSystem->GetOutgoingRequests();

// Get cached incoming requests
const TArray<FGFFriendRequest>& IncomingRequests = FriendsSystem->GetIncomingRequests();