Freigeben über


Bestenlisten mit Azure Functions

In diesem Tutorial erfahren Sie, wie Sie Bestenlisten mithilfe von Cloudscript implementieren, insbesondere über Azure Functions. Dieser Ansatz ist besonders leistungsfähig, da Sie benutzerdefinierte serverseitige Logik ohne Clientupdates erstellen können.

Durch das Definieren von Leaderboard-bezogener Logik innerhalb einer Azure-Funktion kann Ihr Client diese Funktion aufrufen, um den Code auszuführen. Wenn später Änderungen erforderlich sind, können Sie die Azure-Funktion unabhängig aktualisieren – häufig ohne den Client zu ändern – je nach Komplexität des Updates.

Voraussetzungen

Für dieses Tutorial benötigen Sie Folgendes:

  • Ein Azure PlayFab-Konto. Wenn Sie noch keins haben, können Sie es hier erstellen.
  • Ein Azure Abonnement. Wenn Sie kein Abonnement haben, können Sie es hier erstellen.

Weitere Informationen zum Erstellen einer Azure-Funktion finden Sie in diesem Leitfaden. Erstellen Ihrer ersten Funktion in Azure mithilfe von Visual Studio

Erstellen einer Bestenliste mit Azure Functions

In diesem Abschnitt erstellen wir eine einfache Bestenliste, die es uns ermöglicht, Bewertungen zu übermitteln und die besten Ergebnisse abzurufen.

[Function("LeaderboardExample")]
public async Task<HttpResponseData> RunAsync([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
{
    _logger.LogInformation("C# HTTP trigger function processed a request.");

    PlayFabSettings.staticSettings.TitleId = "78C3E"; // Change this value to your own titleId from PlayFab Game Manager
    PlayFabSettings.staticSettings.DeveloperSecretKey = "WJT5SBP7PUFH61JHE39QQ4F1SJKGBWBJR647CH1WYB9CS3MZDD"; // Change this to your title's secret key from Game Manager
                                                                                                              // Check if parameter exists
    if (string.IsNullOrEmpty(req.Query["leaderboardName"]))
    {
        var badResponse = req.CreateResponse(HttpStatusCode.BadRequest);
        badResponse.Headers.Add("Content-Type", "text/plain; charset=utf-8");
        badResponse.WriteString("Please pass a leaderboardName on the query string");
        return badResponse;
    }

    PlayFabAuthenticationContext authContext = await LoginAsTitleEntity();
    var result = await CreateLeaderboardDefinitionAsync(authContext, req.Query["leaderboardName"]);
    if (result != null)
    {
        if (result.Error != null) {
            PlayFabError apiError = result.Error;
            var response = req.CreateResponse(HttpStatusCode.BadRequest);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
            if (apiError != null)
            {
                response.WriteString("Something went wrong with your API call.  :");
                response.WriteString("Here's some debug information:");
                response.WriteString(PlayFabUtil.GenerateErrorReport(apiError));
                return response;
            }
            response.WriteString("Something went wrong with your API call but it wasn't possible to get a PlayFab error description.");
            return response;
        }
        else
        {
            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
            response.WriteString("Leaderboard created successfully!");
            return response;
        }
    }
    else 
    {
        var response = req.CreateResponse(HttpStatusCode.BadRequest);
        response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
        response.WriteString("Something went wrong with your API call.  :");
        return response;
    }    
    
}

  • Dieses Funktionsattribut [Function("LeaderboardExample")] definiert den Namen der Funktion, in diesem Fall "LeaderboardExample".
  • Die Funktion wird durch eine HTTP-Anforderung ausgelöst, wie durch das [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] -Attribut angegeben. Dies bedeutet, dass der Zugriff auf die Funktion über die HTTP-Methoden GET und POST ohne Authentifizierung möglich ist.
  • Innerhalb der Funktion legen wir die PlayFab-Titel-ID und den geheimen Entwicklerschlüssel fest, um unsere Anforderungen an PlayFab-Dienste zu authentifizieren. Sie können die Art und Weise ändern, wie Sie auf diese Werte zugreifen möchten, je nachdem, was am besten zu Ihrem speziellen Fall und zu Ihren Sicherheitsanforderungen passt.
  • Die Funktion überprüft, ob der Abfrageparameter "leaderboardName" in der Anforderung angegeben wird.
  • Anschließend rufen wir die -Methode LoginAsTitleEntity auf, um sich als Titelentität zu authentifizieren, was zum Erstellen von Bestenlistendefinitionen erforderlich ist.
  • Schließlich rufen wir die -Methode CreateLeaderboardDefinitionAsync auf, um eine Bestenlistendefinition mit dem angegebenen Namen zu erstellen. Weitere Informationen zur Erstellung von Bestenlisten finden Sie unter Erstellen einer einfachen Bestenliste und Mehr Mit Bestenlisten tun.

Die RunAsync-Methode dient als Einstiegspunkt für Ihre Azure-Funktion. Von dort aus können Sie zusätzliche Methoden definieren und aufrufen, um Ihre benutzerdefinierte Spiellogik zu erstellen. Wie Sie Fehler behandeln oder mit mehreren PlayFab-Diensten interagieren, liegt ganz bei Ihnen, sodass Sie bei ihrer Implementierung uneingeschränkt flexibel sind.

Darüber hinaus können Sie Automatisierungsregeln konfigurieren, um diese Azure-Funktion basierend auf bestimmten Ereignissen auszulösen. Weitere Informationen finden Sie hier.

Weitere Informationen