Skip to content

Using the Store in Your Game

The GameFuse Store system allows you to create, manage, and purchase store items in your game. Store items are fetched when you call FetchGameVariables() and are refreshed every time you call it again.

Getting Started with Store

To use the GameFuse Store system, you'll need to access the UGameFuseManager and UGameFuseUser subsystems:

UGameFuseManager* GameFuseManager = GetGameInstance()->GetSubsystem<UGameFuseManager>();
UGameFuseUser* GameFuseUser = GetGameInstance()->GetSubsystem<UGameFuseUser>();

Fetching Available Store Items

Store items are fetched when you call FetchGameVariables(). The items will be refreshed every time you call it again.

C++ Example

void UMyObject::FetchStoreItems()
{
    // Get the GameFuse Manager subsystem
    UGameFuseManager* GameFuseManager = GetGameInstance()->GetSubsystem<UGameFuseManager>();

    // Create callback for the operation
    FGFApiCallback CompletionCallback;
    CompletionCallback.AddLambda([this, GameFuseManager](const FGFAPIResponse& Response)
    {
        if(Response.bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Store items fetched successfully"));

            // Get the store items from the manager
            const TArray<FGFStoreItem>& StoreItems = GameFuseManager->GetGameStoreItems();

            for (const FGFStoreItem& StoreItem : StoreItems)
            {
                UE_LOG(LogTemp, Display, TEXT("Name: %s"), *StoreItem.Name);
                UE_LOG(LogTemp, Display, TEXT("Category: %s"), *StoreItem.Category);
                UE_LOG(LogTemp, Display, TEXT("ID: %d"), StoreItem.Id);
                UE_LOG(LogTemp, Display, TEXT("Description: %s"), *StoreItem.Description);
                UE_LOG(LogTemp, Display, TEXT("Cost: %d (credits)"), StoreItem.Cost);
                UE_LOG(LogTemp, Display, TEXT("Icon URL: %s"), *StoreItem.IconUrl);
            }
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to fetch store items: %s"), *Response.ResponseStr);
        }
    });

    // Fetch game variables (includes store items)
    GameFuseManager->FetchGameVariables(CompletionCallback);
}

Fetching Purchased Store Items

Fetching Current User's Purchased Store Items

C++ Example

void UMyObject::FetchMyPurchasedStoreItems()
{
    // Get the GameFuse User subsystem
    UGameFuseUser* GameFuseUser = GetGameInstance()->GetSubsystem<UGameFuseUser>();

    // Create callback for the operation
    FGFStoreItemsCallback CompletionCallback;
    CompletionCallback.BindLambda([this](bool bSuccess, const TArray<FGFStoreItem>& StoreItems)
    {
        if(bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Fetched %d purchased store items"), StoreItems.Num());

            for (const FGFStoreItem& StoreItem : StoreItems)
            {
                UE_LOG(LogTemp, Display, TEXT("Owns Item: %s (ID: %d)"), *StoreItem.Name, StoreItem.Id);
                UE_LOG(LogTemp, Display, TEXT("Category: %s"), *StoreItem.Category);
                UE_LOG(LogTemp, Display, TEXT("Description: %s"), *StoreItem.Description);
            }
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to fetch purchased store items"));
        }
    });

    // Fetch current user's purchased store items
    GameFuseUser->FetchMyPurchasedStoreItems(CompletionCallback);
}

Fetching Other Users' Purchased Store Items

C++ Example

void UMyObject::FetchUserPurchasedStoreItems(int32 UserId)
{
    // Get the GameFuse User subsystem
    UGameFuseUser* GameFuseUser = GetGameInstance()->GetSubsystem<UGameFuseUser>();

    // Create callback for the operation
    FGFStoreItemsCallback CompletionCallback;
    CompletionCallback.BindLambda([this](bool bSuccess, const TArray<FGFStoreItem>& StoreItems)
    {
        if(bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Fetched %d purchased store items for user"), StoreItems.Num());

            for (const FGFStoreItem& StoreItem : StoreItems)
            {
                UE_LOG(LogTemp, Display, TEXT("User's Purchased Item: %s (ID: %d)"), *StoreItem.Name, StoreItem.Id);
                UE_LOG(LogTemp, Display, TEXT("Category: %s"), *StoreItem.Category);
                UE_LOG(LogTemp, Display, TEXT("Description: %s"), *StoreItem.Description);
            }
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to fetch user's purchased store items"));
        }
    });

    // Fetch specific user's purchased store items
    GameFuseUser->FetchUserPurchasedStoreItems(UserId, CompletionCallback);
}

Purchasing Store Items

To purchase a store item, you can use either the store item ID or the store item object. If the user doesn't have enough credits, the purchase will fail.

C++ Example

void UMyObject::PurchaseStoreItem(int32 StoreItemId)
{
    // Get the GameFuse User subsystem
    UGameFuseUser* GameFuseUser = GetGameInstance()->GetSubsystem<UGameFuseUser>();

    // Create callback for the operation
    FGFStoreItemsCallback CompletionCallback;
    CompletionCallback.BindLambda([this](bool bSuccess, const TArray<FGFStoreItem>& StoreItems)
    {
        if(bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Store item purchased successfully"));
            UE_LOG(LogTemp, Display, TEXT("Updated purchased items count: %d"), StoreItems.Num());

            // The user's purchased store items list has been refreshed
            for (const FGFStoreItem& StoreItem : StoreItems)
            {
                UE_LOG(LogTemp, Display, TEXT("Owned Item: %s (ID: %d)"), *StoreItem.Name, StoreItem.Id);
            }
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to purchase store item"));
        }
    });

    // Purchase store item by ID
    GameFuseUser->PurchaseStoreItem(StoreItemId, CompletionCallback);
}

Removing Store Items

You can remove a store item from a user's inventory:

C++ Example

void UMyObject::RemoveStoreItem(int32 StoreItemId)
{
    // Get the GameFuse User subsystem
    UGameFuseUser* GameFuseUser = GetGameInstance()->GetSubsystem<UGameFuseUser>();

    // Create callback for the operation
    FGFStoreItemsCallback CompletionCallback;
    CompletionCallback.BindLambda([this](bool bSuccess, const TArray<FGFStoreItem>& StoreItems)
    {
        if(bSuccess)
        {
            UE_LOG(LogTemp, Display, TEXT("Store item removed successfully"));
            UE_LOG(LogTemp, Display, TEXT("Updated purchased items count: %d"), StoreItems.Num());
        }
        else
        {
            UE_LOG(LogTemp, Error, TEXT("Failed to remove store item"));
        }
    });

    // Remove store item by ID
    GameFuseUser->RemoveStoreItem(StoreItemId, CompletionCallback);
}

Function Parameters

Fetching Store Items

Parameter Type Description
UserId int32 The user ID to fetch purchased items for (optional, for user-specific fetch)
Callback FGFStoreItemsCallback Callback function to handle the response

Purchasing and Removing Store Items

Parameter Type Description
StoreItemId int32 The ID of the store item to purchase or remove
Callback FGFStoreItemsCallback Callback function to handle the response

Function Return Values

UGameFuseUser->PurchaseStoreItem

HTTP status code Description
200 OK - Item purchased successfully
400 Bad request - Invalid parameters
401 Unauthorized - User not signed in
403 Not enough credits or item already purchased
404 Item not found
500 Unknown server error

UGameFuseUser->RemoveStoreItem

HTTP status code Description
200 OK - Item removed successfully
400 Bad request - Invalid parameters
401 Unauthorized - User not signed in
404 Item not found or not owned by user
500 Unknown server error

UGameFuseUser->FetchMyPurchasedStoreItems / UGameFuseUser->FetchUserPurchasedStoreItems

HTTP status code Description
200 OK - Purchased items 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 store data without making API calls:

UGameFuseManager* GameFuseManager = GetGameInstance()->GetSubsystem<UGameFuseManager>();
UGameFuseUser* GameFuseUser = GetGameInstance()->GetSubsystem<UGameFuseUser>();

// Get cached available store items
const TArray<FGFStoreItem>& AvailableItems = GameFuseManager->GetGameStoreItems();

// Get cached purchased store items
const TArray<FGFStoreItem>& PurchasedItems = GameFuseUser->GetPurchasedStoreItems();