Gevalideerde acties

Gevalideerde acties

Door de server gecontroleerde runs voor ranglijsten en spelvaluta, zonder eigen servercode. Tickets voor eenmalig gebruik per run, regels die alleen op de server staan, invoerlogs van de beste runs en moderatie beperken wat een valsspeler kan winnen. Alleen in de cloud, niet in de zelf gehoste simpleServer.

Gratis starten

Tickets voor eenmalig gebruik per run

Elke run begint met een serverticket dat gekoppeld is aan de speler, de ranglijst en een serverseed. Een ticket telt precies één keer en ook een afgewezen run verbruikt het, zodat niemand uw grenzen met één ticket kan aftasten.

Regels alleen op de server

Scoregrenzen, minimale duur, score per seconde, regels per level en valutagrenzen per run staan op de server. Ze verschijnen nooit in app-antwoorden of foutmeldingen, en valuta wordt alleen door de server geschreven.

Invoerlogs en moderatie

Voor de beste runs en gemarkeerde runs vraagt de server het spel om zijn invoerlog. Een verdachte run kunt u zelf naspelen met de seed en het log en daarna beslissen wat ermee gebeurt.

Snelle Integratie

Snelle Integratie

Gevalideerde acties instellen
Video volgt binnenkort

Zet gevalideerde inzendingen aan voor een ranglijst en stel uw serverregels in onder Gevalideerde acties. Volg daarna de gecontroleerde runs en bekijk het bewijs van de beste runs in het dashboard.

C#
// Unity C#: Validated Actions
// Dashboard: turn on "Validated submissions only" for the leaderboard "weekly"
var va = ValidatedActionsManager.Instance;

// Round start: single-use ticket plus server seed
var run = await va.StartRun("weekly");
if (run == null) { Debug.Log(va.LastErrorCode); return; } // e.g. RUN_RATE_LIMITED
var random = new System.Random(run.seed);

// ... play, record the inputs into inputLog (byte[]) ...

// Round end: score plus input log (the SDK sends its SHA-256 hash)
var result = await va.SubmitValidated(18250, inputLog);
if (result == null)
{
    Debug.Log($"{va.LastErrorCode}, run kept: {va.HasActiveRun}"); // e.g. DURATION_TOO_SHORT
}
REST
# REST API: Validated Actions (needs the player's session token)

# Start a run: returns runId, a single-use ticket, seed and expiresAt
curl -X POST https://eu.horizon.pm/api/v1/app/validated-actions/runs \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Authorization: Bearer SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"userId":"USER_ID","leaderboardKey":"weekly"}'

# Submit the run: score plus the SHA-256 hex of the input log
curl -X POST https://eu.horizon.pm/api/v1/app/validated-actions/submit \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Authorization: Bearer SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"userId":"USER_ID","ticket":"TICKET","leaderboardKey":"weekly","score":18250,"inputLogHash":"SHA256_HEX"}'

# Rejected runs answer 422 with a code, e.g. TICKET_EXPIRED or DURATION_TOO_SHORT
Veelgestelde Vragen

Veelgestelde Vragen

Klaar om te integreren?

Begin vandaag nog met horizOn. Free Tier inbegrepen.