Access Leaderboards via Cloud Code C# Modules

You can access Leaderboards functionality using Cloud Code via the Cloud Code C# Module.

Consider the example where a player invokes a Cloud Code module. The code snippet submits the player's score, retrieves their entry (including their rank) and retrieves the top scores in the Leaderboard.

C#

using Microsoft.Extensions.DependencyInjection;
using Unity.Services.CloudCode.Apis;
using Unity.Services.CloudCode.Core;
using Unity.Services.Leaderboards.Model;

public class LeaderboardsExample
{
    [CloudCodeFunction("LeaderboardsExample")]
    public async Task<LeaderboardResult> LeaderboardsExampleAsync(
        IExecutionContext context,
        IGameApiClient apiClient,
        string leaderboardId,
        string playerId,
        int score)
    {
        string accessToken = context.AccessToken;
        Guid projectId = Guid.Parse(context.ProjectId);

        var addScoreResult = await apiClient.Leaderboards.AddLeaderboardPlayerScoreAsync(
            context, accessToken, projectId, leaderboardId, playerId, new LeaderboardScore(score));
        var getScoreResult = await apiClient.Leaderboards.GetLeaderboardPlayerScoreAsync(
            context, accessToken, projectId, leaderboardId, playerId);
        var getScoresResult = await apiClient.Leaderboards.GetLeaderboardScoresAsync(
            context, accessToken, projectId, leaderboardId);

        return new LeaderboardResult()
        {
            AddScoreResult = addScoreResult.StatusCode.ToString(),
            GetScoreResult = getScoreResult.Data,
            GetScoresResult = getScoresResult.Data
        };
    }
}

public class LeaderboardResult
{
    public string AddScoreResult { get; set; }
    public LeaderboardEntryWithUpdatedTime GetScoreResult { get; set; }
    public LeaderboardScoresPage GetScoresResult { get; set; }
}

public class ModuleConfig : ICloudCodeSetup
{
    public void Setup(ICloudCodeConfig config)
    {
        config.Dependencies.AddSingleton(GameApiClient.Create());
    }
}

Admin level access to player-scoped endpoints is also available through Cloud Code. This allows you to update multiple players’ scores, or a player’s score other than the player who invoked the Cloud Code module. This is done by passing the service token to the Cloud Code module instead of the access token.

C#

public class LeaderboardsExample
{
    [CloudCodeFunction("LeaderboardsExample")]
    public async Task<LeaderboardResult> LeaderboardsExampleAsync(
        IExecutionContext context,
        IGameApiClient apiClient,
        string leaderboardId,
        string playerId,
        int score)
    {
        string serviceToken = context.ServiceToken;
        Guid projectId = Guid.Parse(context.ProjectId);

        var addScoreResult = await apiClient.Leaderboards.AddLeaderboardPlayerScoreAsync(
            context, serviceToken, projectId, leaderboardId, playerId, new LeaderboardScore(score));
        var getScoreResult = await apiClient.Leaderboards.GetLeaderboardPlayerScoreAsync(
            context, serviceToken, projectId, leaderboardId, playerId);
        var getScoresResult = await apiClient.Leaderboards.GetLeaderboardScoresAsync(
            context, serviceToken, projectId, leaderboardId);

        return new LeaderboardResult()
        {
            AddScoreResult = addScoreResult.StatusCode.ToString(),
            GetScoreResult = getScoreResult.Data,
            GetScoresResult = getScoresResult.Data
        };
    }
}

Additional resources