Freigeben über


Ändern von schreibgeschützten oder internen Playerdaten aus CloudScript

Auf Playerdaten kann über CloudScript zugegriffen werden, wenn Sie sie für Ihren Titel benötigen.

Weitere Informationen zur Verwendung von CloudScript finden Sie unter CloudScript-Schnellstart.

Das C#-Beispiel in diesem Thema wurde für das Unity SDK geschrieben. Das Unity SDK verwendet ein ereignisgesteuertes Modell, um nicht synchrone Aufgaben zu verarbeiten. Um den Beispielcode mit den Standard-C#- oder Xamarin C#-SDKs auszuführen, müssen Sie den Code so ändern, dass er ein asynchrones Aufgabenmodell verwendet. Methoden, die geändert werden müssen, weisen Async an den Methodennamen in der Signatur an. Beispielsweise wird SetObject im Unity SDK im Standard-C#-SDK zu SetObjectAsync. Weitere Informationen finden Sie unter Asynchrone Programmierung mit async und await.

CloudScript-Codebeispiel

Sie müssen sehr vorsichtig sein, um die Sicherheit Ihrer Server-API-Aufrufe in CloudScript sicherzustellen. Der folgende Code veranschaulicht das sichere Ändern von schreibgeschützten Playerdaten aus CloudScript.

function IncrementReadOnlyUserData(args) {
  var playerData = server.GetUserInternalData({
        PlayFabId: currentPlayerId,
        Keys: ["ReadOnlyTest"]
  });

  var prevCount = "0";
  var nextCount = "1";
  try {
    prevCount = playerData.Data["ReadOnlyTest"].Value;
    var prevInt = parseInt(prevCount, 10);
    if (prevInt != prevInt) {
      prevInt = 0;
      nextCount = (prevInt + 1).toString();
    }
  } catch (e) {
    prevCount = "0";
    nextCount = "0";
  }

  var updateUserDataResult = server.UpdateUserInternalData({
    PlayFabId: currentPlayerId,
    Data:
        {
          "ReadOnlyTest": nextCount
        }
  });
}

C#-Codebeispiel

Wie im CloudScript-Schnellstart erläutert, können Sie die folgende Logik vom Client aufrufen.

public void CloudIncrement() {
    PlayFabClientAPI.ExecuteCloudScript( new ExecuteCloudScriptRequest {
        FunctionName = "IncrementReadOnlyUserData"
    },
    result => Debug.Log("CloudScript call successful"),
    error => {
        Debug.Log("CloudScript call failed");
        Debug.Log(error.GenerateErrorReport());
    });
}