Ukáž, čo niekto práve hrá
Tvoja hra môže mssgs oznamovať, čo hráč práve robí. Priatelia uvidia pod jeho menom „Playing“, otvoria podrobnosti a tlačidlom Join now sa pripoja do tej istej hry. Tvoja hra si tiež môže overiť, či je hráč v tvojej komunite.
Čo s tým môžeš robiť
- Zverejni herný statusHru, čo hráč práve robí, jeho rolu a ako veľmi je partia zaplnená.
- Pridaj tlačidlo Join nowPriatelia sa jedným stlačením pripoja do tej istej hry, na server alebo do lobby.
- Over členstvoZisti, či je hráč v tvojej komunite a s akými rolami.
- Počítač, prehliadač alebo mobilNatívne hry používajú lokálny most; hry v prehliadači a na mobile idú cez tvoj backend.
V aplikácii
Status pod menom a podrobnosti, ktoré otvorí. Hra zverejnila jeden blok JSON; zvyšok zariadi aplikácia.
Prehľad
Desktopová aplikácia mssgs spúšťa malý lokálny HTTP most, s ktorým komunikuje hra na tom istom počítači. Tvoja hra nikdy nekomunikuje s našimi servermi, nikdy nevidí heslo ani token účtu a nikdy nemôže uverejňovať za hráča. Komunikuje s kópiou mssgs, v ktorej je hráč už prihlásený, a táto kópia rozhoduje, čo odpovie.
Čo s ním môžeš robiť:
- Zistiť, že je mssgs nainštalovaný a niekto je prihlásený.
- Prečítať, kto je hráč: user_guid, username, avatar.
- Opýtať sa „je tento hráč v komunite X?“ a akú rolu tam má.
- Zverejniť pre ostatných status „Playing …“ s tlačidlom Join now.
- Prijať údaje na pripojenie, keď niekto toto tlačidlo stlačí.
Dve cesty
Natívna desktopová hra komunikuje s lokálnym mostom; to opisujú nasledujúce sekcie. Hra v prehliadači alebo na mobile sa k tomuto mostu nedostane. Za ňu zverejňuje tvoj vlastný backend, a to pre hráčov, ktorí prepojili svoj účet mssgs cez QR kód alebo osemznakový kód: pozri Hry v prehliadači a na mobile, s CozyCity ako prvým príkladom. Samotný herný status je v oboch prípadoch ten istý blok.
Predvolene čo najmenej údajov
Rozsahy sú zámerne nerovnaké. Ak potrebuješ vedieť len „je táto osoba v našej komunite“, požiadaš o membership.query a server_guid uvedieš sám: dostaneš áno/nie plus jej roly v tejto komunite a o jej ostatných komunitách sa nedozvieš nič. Úplný zoznam je za samostatným, vyšším rozsahom, ktorý musí hráč schváliť osobitne.
Hľadanie klienta
Most počúva iba na 127.0.0.1, na prvom voľnom porte z malého rozsahu. Skúšaj ich postupne, kým niektorý neodpovie: 7440, 7441, 7442, 7443. Vývojárske zostavy mssgs namiesto toho počúvajú na 7540–7543, takže testovacia zostava nikdy neodpovie na volania skutočnej hry.
http://127.0.0.1:7440/mssgs/v1/hello
Token netreba a odpoveď o hráčovi nehovorí nič, iba to, že mssgs tu je a či je niekto prihlásený.
{
"product": "mssgs",
"api": 1,
"client": "desktop",
"version": "14.2.20015",
"platform": "darwin",
"signed_in": true,
"scopes": ["identity", "staff", "membership.query", "servers.list", "presence.write"]
}
Skôr než pôjdeš ďalej, skontroluj product === "mssgs" a api. Ak neodpovie žiadny zo štyroch portov, mssgs nebeží. Jednoducho ponúkni bežný zážitok a nenechaj hráča čakať.
Rozsahy a súkromie
Päť rozsahov prezrádza veľmi rozdielne množstvo údajov. To nie je náhoda, na tom stojí celý návrh. Žiadaj čo najmenej a postupuj touto tabuľkou zhora nadol.
| Rozsah | Čo umožňuje | Čo hráč odovzdá |
|---|---|---|
presence.write |
Ukázať, čo hrá | Nič. Tento rozsah iba zapisuje; nečíta vôbec žiadne údaje účtu. |
identity |
Kto je hráč | user_guid, username, zobrazované meno, URL avatara. |
staff |
Príznaky personálu / moderátora | Dve booleovské hodnoty navyše k identity. Samostatne, pretože hra, ktorá ukazuje meno, nemá čo vedieť, že hráč moderuje komunity. |
membership.query |
Overiť komunitu, ktorú už poznáš | Pre server_guid, ktorý uvedieš: áno/nie, jej názov a roly, ktoré tam hráč má. Nič o žiadnej inej komunite. |
servers.list |
Všetky komunity, v ktorých je | Úplný zoznam: guidy, názvy, ikony a roly. Toto je ten drahý rozsah: žiadaj oň iba vtedy, keď ho naozaj potrebuješ. |
Väčšine hier stačia dva
identity a presence.write pokrývajú „kto si“ a „ukáž, čo hráš“, čo je takmer každá integrácia. Pridaj membership.query, ak chceš viazať odmenu na členstvo v tvojej komunite. servers.list nepotrebuješ takmer nikdy a hráč ho vidí zvýraznený načerveno.
Overenie členstva
Toto je alternatíva k „daj mi celý zoznam“. Uvedieš server_guid vlastnej komunity (ten už poznáš) a dostaneš odpoveď iba o nej.
curl -H "Authorization: Bearer $TOKEN" \
"http://127.0.0.1:7440/mssgs/v1/membership?server_guid=ca94ecc…f4g02"
# člen:
# {"server_guid":"ca94ecc…","member":true,"name":"Acme Fans","is_owner":false,
# "roles":[{"guid":"0aa32…","name":"Pro"}]}
# nie je člen a nič viac:
# {"server_guid":"…","member":false}
„Nie“ znamená presne to a nič viac. V jednom volaní môžeš poslať až 10 guidov (zopakuj server_guid alebo ich oddeľ čiarkami) a dostaneš pole results. Skupina @everyone nikdy nie je v roles: platí pre každého člena, takže ti nič nepovie.
Zverejnenie herného statusu
Jeden PUT umiestni riadok „Playing …“ pod meno hráča, všade, kde ho vidia jeho komunity.
{
"name": "Space Raiders",
"details": "Sector 7",
"state": "In a raid",
"role": "Gunner",
"started_at": 1755859200000,
"party": { "size": 3, "max": 4, "kind": "party" },
"join": { "secret": "raid-42" }
}
Povinné je iba name. Odpoveď ti povie, ako dlho status žije a ako často posielať heartbeat:
{ "ok": true, "expires_in_ms": 90000, "heartbeat_every_ms": 30000 }
Heartbeat, inak status zmizne
Status bez známky života počas 90 sekúnd sa automaticky vymaže. Je to zámer: keď hra spadne, hráč potom celé hodiny nevisí ako „hrajúci“. Posielaj POST /mssgs/v1/activity/heartbeat každých 30 sekúnd a pri riadnom ukončení DELETE /mssgs/v1/activity.
Počet hráčov a rola
party.kind určuje, ktorá veta sa zobrazí, pretože tie isté dve čísla neznamenajú to isté. Štvorčlenná partia nie je server so štyrmi hráčmi.
kind |
Zobrazí sa ako | Pre |
|---|---|---|
party (predvolené) | 3 of 4 in the party | partia, posádka alebo skupina |
server | 4/100 players | herný server (FiveM, komunitný server) |
lobby | 4/100 players | lobby pred začiatkom zápasu |
match | 4/100 players | prebiehajúci zápas alebo kolo |
role (do 48 znakov) je to, za koho hráč hrá: povolanie, trieda alebo postava. Má vlastné pole namiesto ďalšej vety v state, pretože sa zobrazuje ako štítok vedľa počtu hráčov.
details a state majú limit 128 znakov, name 64. Zalomenia riadkov a riadiace znaky sa odstraňujú. URL ikony zámerne nie je podporovaná: sťahoval by ju každý klient, ktorý riadok zobrazí, a zo statusu by sa stal maják, ktorý tvojmu serveru hlási každého člena každej komunity, v ktorej hráč je.
Tlačidlo Join now
Pridaj do svojej aktivity blok join a ostatní členovia dostanú vedľa statusu tlačidlo Join now. Sú dva spôsoby a môžeš ich kombinovať.
1. Tajný reťazec (pre natívne hry)
Nastav {"join":{"secret":"raid-42"}}. Keď niekto stlačí Join now, tento reťazec sa doručí do jeho vlastnej kópie tvojej hry, na jeho vlastnom počítači, spárovanej podľa toho istého game_id. Neotvorí sa žiadna URL a nespustí sa žiadny handler schémy. Tvoja hra si ho vyzdvihne takto:
{
"events": [
{ "seq": 1, "type": "join", "secret": "raid-42",
"from": { "user_guid": "62e377…", "username": "mssgs-test-1" } }
],
"cursor": 1
}
Pýtaj sa s ?since=<cursor>, aby ti každá udalosť prišla iba raz. Ak hra toho, kto tlačidlo stlačil, nebeží, nedoručí sa nič, a to je dobrý dôvod ponúknuť aj URL.
2. URL s https (pre webové hry a odkazy na lobby)
Nastav {"join":{"url":"https://play.example.com/s/abc"}} a tlačidlo otvorí tento odkaz. Akceptuje sa iba https. Vlastná schéma (steam://, mygame://, file://) sa odmietne: tento blok sa dostane na obrazovku každého člena a taká URL je spôsob, ako prinútiť cudzí počítač spustiť lokálny handler s argumentmi podľa tvojej voľby.
Všetko v join je verejné
Blok join sa rozosiela každému, kto vidí status hráča; v tom je celý zmysel tlačidla Join now. Ber ho preto ako kód lobby, nie ako prihlasovacie údaje. Nikdy doň nedávaj nič, čo musí zostať tajné, a daj svojim kódom obmedzenú platnosť.
FiveM
FiveM nemá vo svojom klientskom prostredí Lua žiadne HTTP, takže zdroj (resource) komunikuje s mostom cez NUI, zobrazenie CEF, ktoré posiela Origin. Most tieto originy výslovne akceptuje: https://cfx-nui-<resource> a starší nui://<resource>. Bežné webové stránky zostávajú odmietnuté a stránka na otvorenom webe sa za tento origin vydávať nemôže; nastavuje ho sám prehliadač.
-- Stránka NUI robí HTTP; Lua jej iba posiela údaje.
CreateThread(function()
while true do
SendNUIMessage({
action = 'mssgs:publish',
players = GetActivePlayers and #GetActivePlayers() or 0,
maxPlayers = GetConvarInt('sv_maxclients', 100),
job = exports['qb-core'] and 'Police' or nil
})
Wait(30000) -- heartbeat: status vyprší po 90 s
end
end)
const BASE = 'http://127.0.0.1:7440/mssgs/v1'; // skúšaj 7440-7443
let token = null;
async function authorize () {
const res = await fetch(`${BASE}/authorize`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
game_id: 'fivem.lossantos.rp',
name: 'Los Santos Roleplay',
scopes: ['presence.write'] // nič viac tu netreba
})
});
const started = await res.json();
if (started.status === 'approved') { return started.token; }
// Hráč teraz v mssgs vidí dialóg so žiadosťou o povolenie.
for (let i = 0; i < 180; i += 1) {
await new Promise((r) => { setTimeout(r, 1000); });
const poll = await (await fetch(`${BASE}/authorize/${started.request_id}`)).json();
if (poll.status === 'approved') { return poll.token; }
if (poll.status !== 'pending') { return null; }
}
return null;
}
window.addEventListener('message', async (event) => {
if (event.data.action !== 'mssgs:publish') { return; }
if (!token) { token = await authorize(); }
if (!token) { return; }
await fetch(`${BASE}/activity`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` },
body: JSON.stringify({
name: 'FiveM',
details: 'Los Santos Roleplay',
role: event.data.job, // "Police"
party: { size: event.data.players, max: event.data.maxPlayers, kind: 'server' },
join: { url: 'https://cfx.re/join/abc123' } // tvoj odkaz cfx.re
})
});
});
Výsledok: Playing FiveM · Los Santos Roleplay · 4/100 players · Police, s tlačidlom Join now, ktoré otvorí tvoj odkaz cfx.re.
Žiadaj iba o presence.write
Herný status nič iné nepotrebuje: tento rozsah nečíta vôbec nič. Ak chceš viazať hernú odmenu na členstvo v tvojej komunite mssgs, pridaj membership.query a uveď server_guid svojej komunity; o ostatných komunitách hráča sa stále nedozvieš nič.
Server, na ktorom hráš, nie je automaticky dôveryhodný
Každý server FiveM môže spúšťať klientske zdroje, takže o povolenie môže požiadať každý server, na ktorý sa niekto pripojí. Práve preto je medzi tým dialóg, ktorý zdroj menuje: rozhoduje hráč, nie server.
Hry v prehliadači a na mobile: prepojenie cez tvoj backend
Hra v karte prehliadača alebo na mobile sa k mostu opísanému vyššie nedostane. Most beží na hráčovom počítači a v ceste stoja tri prekážky: most odmietne každú požiadavku s hlavičkou Origin prehliadača, Chrome sa pýta na povolenie, skôr než verejná stránka načíta 127.0.0.1, a Safari to rovno odmietne, a mobil sa k loopbacku počítača nedostane vôbec.
Smer sa preto otočí. Tvoj vlastný backend už vie, kto hrá, a oznámi to mssgs, a to pre hráčov, ktorí prepojili svoj účet mssgs s tvojou hrou. Prepojenie sa schvaľuje v aplikácii mssgs, nikdy v tvojej hre, a vzniká ním prepojenie, nikdy relácia: nič z toho, čo nasleduje, nemôže nikoho prihlásiť ani konať za hráča. Klient tvojej hry nikdy nevidí kľúč a nikdy nekomunikuje s mss.gs. Prvou hrou na tejto ceste je CozyCity, budovateľská hra o meste, ktorá vychádza ako stránka WebGL a aplikácia pre iPhone, bez desktopovej verzie; príklady nižšie sú priamo z nej.
1. Zaregistruj svoju hru
Zaregistruj hru na registračnej stránke Game SDK: tvoj game_id (napríklad com.deverence.cozycity), názov a ikonu, ktoré hráč uvidí v okne na schválenie, a názvy hostiteľov tvojho backendu. Tam ju posúdime a po schválení ťa na tej istej stránke čaká tvoj kľúč backendu, zobrazený iba raz; my si uchovávame len jeho odtlačok. Kľúč patrí na tvoj server a nikam inam. Kedykoľvek ho tam môžeš vymeniť a starý zostane platný 24 hodín, aby nasadenie mohlo prebehnúť postupne.
Názov a ikona v okne vždy pochádzajú z registrácie, nikdy z požiadavky. Inak by phishingový odkaz mohol žiadosť o prepojenie vydávať za ľubovoľnú hru. Názvy hostiteľov určujú, kam môže join.url smerovať, pozri nižšie.
2. Prepoj hráča
Hráč v tvojej hre zvolí Connect mssgs. Tvoja hra sa opýta tvojho backendu a tvoj backend sa opýta nás:
curl -X POST https://ams1-gateway.mss.gs/game-sdk/v1/link/start \
-H "Authorization: Bearer $BACKEND_KEY" \
-H "Content-Type: application/json" \
-d '{ "player_ref": "player-8812", "player_name": "René\u2019s city" }'
# {"link_code":"K7PQ2XM4","device_code":"…","qr_url":"https://mss.gs/gl/K7PQ2XM4",
# "deep_link":"mssgs://link-game/K7PQ2XM4","expires_in":600,"interval":5}
player_ref je tvoje vlastné stále ID tohto hráča (do 128 znakov), nie relácie ani zápasu; player_name (do 64) je to, čo okno ukáže ako „Player: …“. Klientovi hry odovzdaj iba link_code, qr_url a deep_link. device_code slúži na tvoje dopytovanie a zostáva na serveri.
Tvoja hra potom ukáže naraz tri veci, pretože hráč môže byť kdekoľvek:
- QR kód z
qr_url. Mobil s mssgs ho otvorí rovno v okne aplikácie na schválenie. Bez aplikácie skončí na stránke na mss.gs, ktorá ukáže kód a ponúkne stiahnutie. - Tlačidlo „Open in mssgs“ s
deep_link, pre prehliadač na počítači, kde beží desktopová aplikácia. Je to jediná externá URL, ktorú tvoja hra kedy potrebuje otvoriť. - Samotný kód, v dvoch skupinách po štyri znaky, na zadanie v Settings → Game Activity → Link a game. Abeceda nemá 0/O ani 1/I, takže pri prepisovaní sa chyba stane len zriedka.
Čo hráč uvidí v mssgs, v okne, ktoré aplikácia vykreslí z registrácie:
Connect CozyCity to your mssgs account?
CozyCity will be able to show what you are playing as your mssgs status. It will not see your messages, your friends or your servers, and it cannot post as you.
Player: René's city · Connect / Not now
Medzitým sa tvoj backend každých interval sekúnd pýta (na častejšie otázky dostane 429 SLOW_DOWN), kým sa status nezmení. Kód funguje raz a vyprší po desiatich minútach:
curl -X POST https://ams1-gateway.mss.gs/game-sdk/v1/link/poll \
-H "Authorization: Bearer $BACKEND_KEY" \
-H "Content-Type: application/json" \
-d '{ "device_code": "…" }'
# {"status":"pending"}
# {"status":"denied"} # hráč zvolil Not now
# {"status":"expired"}
# {"status":"linked","link_guid":"…","user":{"user_guid":"62e377…"}}
Ulož si link_guid k svojmu hráčovi; odteraz je to adresa, pre ktorú zverejňuješ. Odpoveď obsahuje iba user_guid; username sa pridá len vtedy, keď má tvoja registrácia rozsah identity.link, a nič viac už nie. Druhé schválenie pre ten istý player_ref nahradí predchádzajúce prepojenie, takže jeden hráč tvojej hry je jeden účet mssgs. Ten istý účet mssgs môže byť prepojený s viacerými hrami a s viacerými player_ref jednej hry (rodinný iPad).
3. Zverejni herný status
Ten istý blok ako pri moste, s tými istými pravidlami a limitmi, len teraz pre každé prepojenie zvlášť a s tvojím kľúčom backendu:
{
"activity": {
"name": "CozyCity",
"details": "Lantern Hollow",
"state": "Day 12 · 34 residents",
"started_at": 1788901000000,
"party": { "size": 6, "max": 40, "kind": "server" },
"join": { "url": "https://cozycity.net/game/?share=…" }
}
}
200 {"published":true,"changed":true} # blok sa zmenil a bol rozoslaný
200 {"published":true,"changed":false} # zhodný s uloženým; obnovilo sa iba TTL
204 # uložené, ale hráč teraz nie je online v mssgs
410 {"error":"LINK_REVOKED"} # hráč sa odpojil: zahoď prepojenie
Ber 200 a 204 rovnako: uložené. { "activity": null } blok vymaže, pošli to, keď hráč odíde. Jeden rozdiel oproti mostu: hostiteľ v join.url musí byť jeden z tvojich registrovaných backendov (alebo jeho subdoména), inak dostaneš 400 INVALID_PAYLOAD. Backend tak nemôže do statusu hráča pridať tlačidlo Join now, ktoré vedie niekam, kde ten hráč nikdy nehral.
Heartbeat každých 60 sekúnd, TTL 120
Zverejnený status žije 120 sekúnd bez novej správy a potom sám zmizne. Posielaj preto ten istý blok každých 60 sekúnd; nezmenený blok nič nestojí a iba obnoví TTL. Keď sa tvoj heartbeat zastaví, zmizne aj riadok „Playing …“, a presne o to ide.
So stovkami hráčov online posielaj heartbeat jedným volaním, až 100 položiek naraz. Každá položka dostane vlastný status, takže jeden hráč, ktorý sa v mssgs odpojil, nikdy nezastaví ostatných deväťdesiatdeväť:
{ "items": [ { "link_guid": "…", "activity": { "name": "CozyCity", "details": "Lantern Hollow" } },
{ "link_guid": "…", "activity": null } ] }
// → 200 { "results": [ { "link_guid": "…", "status": 200, "changed": false },
// { "link_guid": "…", "status": 410 } ] }
Ako sa status zobrazuje
- Rovnako ako status z mostu: Playing CozyCity · Lantern Hollow · 6/40 players, s Join now, keď je k dispozícii
join.url. Server blok označívia: "backend", takže klient môže doplniť „Shared by the game's server“. - Iba vtedy, keď je hráč online v mssgs. Bez otvoreného klienta mssgs je účet offline a offline aj zostane; tvoj backend nemôže spôsobiť, aby niekto vyzeral prítomný. Vďaka tomu sa z tejto cesty nestane ani maják „sedí René pri počítači?“.
- Priorita: hra v aplikácii > hra cez most > tvoj backend. Keď si hráč v mssgs sadne k šachu, zatiaľ čo tvoj backend ďalej posiela heartbeat, vyhrá šach, nie ten, kto zapísal posledný.
Odpojenie
Hráč vidí každé prepojenie v Settings → Game Activity → Linked games, s tvojou ikonou a názvom, menom hráča z tvojej hry, časom prepojenia a posledného zverejnenia a tlačidlom Disconnect. Potom na tvoje ďalšie zverejnenie príde odpoveď 410 LINK_REVOKED; tak sa to tvoja hra dozvie. Zahoď link_guid a znova ponúkni „Connect mssgs“. Zo svojej strany prepojenie ukončíš cez DELETE /game-sdk/v1/links/{link_guid}.
Limity
Pre jedno prepojenie sa zmena započíta najviac raz za 2 sekundy; nezmenený heartbeat je zadarmo. Na kľúč pripadá 600 požiadaviek za minútu, pričom položky v dávke sa rátajú jednotlivo: heartbeat pre 300 hráčov každých 60 sekúnd minie 5 zo 600.
Referencia endpointov: most
Základná URL http://127.0.0.1:<port>. Všetko okrem prvých troch vyžaduje Authorization: Bearer <token>.
| Metóda | Cesta | Scope | Čo robí |
|---|---|---|---|
| GET | /mssgs/v1/hello |
žiadny | Je tu mssgs, čo podporuje a je niekto prihlásený? Jediná trasa, ktorá nepotrebuje token, a o hráčovi nepovie nič. |
| POST | /mssgs/v1/authorize |
žiadny | Požiadaj hráča o povolenie. Vyvolá dialóg v aplikácii a vráti request_id na dopytovanie. |
| GET | /mssgs/v1/authorize/:request_id |
žiadny | pending, approved (s tokenom), denied alebo expired. |
| GET | /mssgs/v1/me |
identity |
Prihlásený hráč. is_staff / is_moderator pridá iba s rozsahom staff. |
| GET | /mssgs/v1/membership |
membership.query |
Členstvo v hodnotách server_guid, ktoré pošleš (až 10, opakovane alebo oddelené čiarkami). |
| GET | /mssgs/v1/servers |
servers.list |
Všetky komunity, v ktorých hráč je, s jeho rolami. Súkromné správy nie sú nikdy zahrnuté. |
| PUT | /mssgs/v1/activity |
presence.write |
Zverejni blok „Playing …“. Vráti TTL a ako často posielať heartbeat. |
| POST | /mssgs/v1/activity/heartbeat |
presence.write |
Udrž zverejnenú aktivitu nažive bez jej opätovného posielania. |
| DELETE | /mssgs/v1/activity |
presence.write |
Okamžite ju vymaž, pri riadnom ukončení. |
| GET | /mssgs/v1/events |
presence.write |
Údaje na pripojenie určené tvojej hre. Dopytuj s ?since=<cursor>. |
| GET | /mssgs/v1/session |
žiadny | Čo tento token má: game_id, udelené rozsahy, či je niekto prihlásený. |
| DELETE | /mssgs/v1/session |
žiadny | Vráť povolenie. Rovnaký účinok, ako keď ho hráč odvolá v Settings. |
Referencia endpointov: prepojené backendy
Základná URL https://ams1-gateway.mss.gs. Každá trasa vyžaduje Authorization: Bearer <backend key> a rozsah activity.write v tvojej registrácii; odpovede odchádzajú s Cache-Control: no-store. Volaj ich zo svojho servera, nikdy z herného klienta.
| Metóda | Cesta | Čo robí |
|---|---|---|
| POST | /game-sdk/v1/link/start |
Začni prepojenie pre jedného zo svojich hráčov ({ player_ref, player_name? }). Vráti link_code, device_code, qr_url, deep_link, expires_in a interval. |
| POST | /game-sdk/v1/link/poll |
{ device_code } → pending, denied, expired alebo linked s link_guid a user. |
| DELETE | /game-sdk/v1/links/{link_guid} |
Ukonči prepojenie zo svojej strany. Hráč môže urobiť to isté v Settings. |
| PUT | /game-sdk/v1/links/{link_guid}/activity |
Zverejni blok „Playing …“ pre jedného hráča; { "activity": null } ho vymaže. |
| POST | /game-sdk/v1/activity/batch |
To isté pre až 100 hráčov v jednom volaní. Každá položka odpovedá samostatne. |
Chybové kódy
Chyby sa vracajú ako {"error":"CODE","message":"…"} so zodpovedajúcim HTTP statusom.
| Kód | Význam |
|---|---|
401 UNAUTHORIZED | Chýbajúci alebo neznámy token; najprv autorizuj. |
403 MISSING_SCOPE | Hráč toto povolenie neudelil. Možno ho odškrtol. |
403 ORIGIN_NOT_ALLOWED | Požiadavka mala Origin prehliadača. Pozri „Iba natívne hry“ nižšie. |
409 NOT_SIGNED_IN | mssgs beží, ale nikto nie je prihlásený. |
429 RATE_LIMITED | Viac ako 120 požiadaviek za minútu od jednej hry. |
400 INVALID_GAME_ID | game_id smie obsahovať iba písmená, číslice, bodku, pomlčku alebo podčiarkovník. |
400 TOO_MANY_GUIDS | Najviac 10 hodnôt server_guid na jedno volanie membership. |
Prepojené backendy
Trasy backendu používajú ten istý tvar. V dávke sa status vracia pre každú položku zvlášť v results, takže jedno ukončené prepojenie nikdy nezhodí celé volanie.
| Kód | Význam |
|---|---|
401 INVALID_BACKEND_KEY | Neznámy kľúč alebo kľúč vymenený pred viac ako 24 hodinami. |
403 SCOPE_NOT_GRANTED | Tvoja registrácia nemá rozsah, ktorý táto trasa potrebuje. |
400 INVALID_PAYLOAD | Chybné telo požiadavky, viac ako 100 položiek v dávke alebo join.url, ktorej hostiteľ nie je jeden z tvojich registrovaných backendov. |
400 INVALID_ACTIVITY | Po normalizácii nezostal žiadny použiteľný názov. |
410 LINK_REVOKED | Prepojenie skončilo, na jednej alebo druhej strane. Zahoď ho a znova ponúkni „Connect mssgs“. |
429 SLOW_DOWN | Dopyty na link/poll prišli častejšie, než dovoľuje interval. |
429 RATE_LIMITED | Zmena jedného prepojenia do 2 sekúnd od predchádzajúcej alebo viac ako 600 požiadaviek za minútu na tvoj kľúč. |
503 LINK_STORE_UNAVAILABLE | Dočasný problém na našej strane. Skús to znova pri ďalšom heartbeate. |
Bezpečnosť
Iba natívne hry
Požiadavky s hlavičkou Origin webovej stránky sa odmietnu s 403 ORIGIN_NOT_ALLOWED. Keby ľubovoľná webová stránka mohla zistiť, že používaš mssgs, a vyvolať dialóg so žiadosťou o povolenie, bola by to vstupná brána pre fingerprinting a phishing, nie funkcia. Natívna hra Origin vôbec neposiela, takže sa jej to netýka, a vlastný vstavaný prehliadač hry je povolený menovite, pozri FiveM. Ak vytváraš hru pre prehliadač alebo mobil, s mostom nekomunikuješ: za prepojených hráčov zverejňuje tvoj vlastný backend, pozri Hry v prehliadači a na mobile.
Čo má hráč stále pod kontrolou
- Hráč môže most vypnúť v Settings → Game Activity a potom už žiadna hra mssgs vôbec nevidí.
- Každá schválená hra je tam uvedená presne s povoleniami, ktoré má, s časom poslednej aktivity a tlačidlom Remove. Odstránenie platí okamžite: token hneď prestane fungovať.
- Prepojená hra v prehliadači alebo na mobile je uvedená v Linked games s tlačidlom Disconnect. Odpojenie tiež platí okamžite: ďalšie zverejnenie tohto backendu dostane
410. - Most počúva iba na 127.0.0.1, nikdy v sieti.
- Súkromné správy sa nikdy neprezradia, ani pri servers.list.
- Každá hra má limit 120 požiadaviek za minútu.
Dobré zvyky
- Žiadaj o rozsahy, keď ich potrebuješ, nie o všetky naraz pri prvom spustení.
- Funguj aj bez mssgs: hráč ho mať nemusí.
- Keď hranie skončí, vymaž svoj status a nečakaj na TTL.
- Odmietnutý rozsah ber ako bežný výsledok, nie ako chybu.