# Deling, venner og invitasjoner i PlayDrop-spill

Del et spill med et bilde eller klipp, les startdata, velg venner, send invitasjons- og utfordringskort i PlayDrop Chat og anbefal andre spill.

Source: https://www.playdrop.ai/nb/create/learn/social

PlayDrop håndterer delingsarket, vennelisten og chatten; spillet ditt ber om dem i riktig øyeblikk. Spillerne tar med seg vennene sine, og vennene havner i spillet ditt.

## Del spillet

Kall `sdk.host.share()` fra et trykk eller klikk. Det deler spillets offentlige side med valgfri tekst, et bilde eller en kort video, og valgfrie startdata.

```js
shareButton.addEventListener("click", async () => {
  try {
    await sdk.host.share({ text: `I reached level ${level} in Moon Jump`, image: scoreCardBlob, payload: "level-7" });
  } catch (error) {
    console.warn("Share failed", error);
  }
});
```

- `image`: en GIF-, JPEG-, PNG- eller WebP-Blob på opptil 8 MiB. Verter som ikke kan legge ved bilder, deler bare lenken.
- `video`: en MP4-Blob på høyst 15 sekunder og 20 000 000 byte, i stedet for et bilde. H.264/AAC i 1080p i 16:9, 9:16 eller 1:1 fungerer best. Verter uten videostøtte avviser med `host_share_video_unsupported` i stedet for å dele en vanlig lenke.
- Klargjør Bloben før trykket; hvis du genererer den etter trykket, kan nettleseren miste tillatelsen til å dele.
- Du kan ikke dele en egendefinert URL eller andre filer. Lenken er alltid spillets side.

Bildefeilene er `invalid_host_share_image`, `host_share_image_type` og `host_share_image_too_large`.

## Les startdataene

`payload` er opptil 256 base64url-tegn. En spiller som åpner den delte lenken, starter spillet med `sdk.host.launchPayload` satt til denne verdien, eller `null`. Behandle det som upålitelige inndata: valider det, og sjekk på serveren at spilleren har lov til å bli med i et rom det nevner. Legg aldri påloggingsopplysninger i det.

## Velg venner og send spillkort

`sdk.social.selectFriends({ max })` åpner PlayDrops vennevelger (1 til 10, standard 1) og returnerer bare vennene spilleren valgte, eller `[]` hvis spilleren avbryter. Send deretter et kort som vises i PlayDrop Chat:

```js
const [friend] = await sdk.social.selectFriends({ max: 1 });
if (friend) {
  await sdk.social.sendMessage({
    recipientUserId: friend.id,
    type: "challenge",
    title: "Beat my time: 42.3 s",
    subtitle: "Moon Jump, level 7",
    payload: "level-7",
    clientMessageId: `challenge-${runId}-${friend.id}`,
  });
}
```

- `type` er `invite`, `request`, `gift`, `challenge` eller `turn`.
- `title` er opptil 80 tegn og `subtitle` opptil 160.
- `expiresInSeconds` er fra 60 sekunder til 30 dager (standard).
- `clientMessageId` gjør et nytt forsøk trygt: gjenbruk returnerer den opprinnelige meldingen.
- Du kan sende meldinger til venner spilleren har valgt, venner som spiller dette spillet, og spillere som spilleren allerede utveksler spillmeldinger med. Fremmede man møter via matchmaking, kan ikke få meldinger.

Les innkommende kort med `getMessages({ limit })`, eldste først, og merk deretter hvert av dem som håndtert med `consumeMessage(message.id)`. Avsenderen er `message.from.id`.

```js
const page = await sdk.social.getMessages({ limit: 20 });
for (const message of page.messages) {
  await applyCard(message.type, message.from.id, message.payload);
  await sdk.social.consumeMessage(message.id);
}
```

Fortsett med `cursor: page.nextCursor` til den er `null`.

## Venner som spiller dette spillet

`sdk.social.listGameFriends()` returnerer venner med en nylig økt i dette spillet: en god liste for «spill med»-knapper. Den viser ikke hele vennelisten eller hvem som er pålogget. `openProfile(userId)` åpner en spillers profil, og `openChat({ recipientUserId, draftMessage })` åpner Chat med et redigerbart utkast som spilleren sender selv.

En ny spiller som kom via en venn, kan ha `sdk.host.launchFriend` satt. Tilby å spille med vennen og bekreft med `selectFriends({ max: 1 })`; start aldri noe automatisk.

## Anbefal andre spill

I en naturlig pause, for eksempel når spillet er over, viser `sdk.host.showGames({ games: ["@creator/name"] })` PlayDrop-kort for ett til tre andre offentlige spill og setter ditt spill på pause. Kallet fullføres med `played` (PlayDrop bytter da spill) eller `dismissed`. `sdk.host.preloadGame(ref)` gir hint om spillet spilleren kanskje åpner neste gang.

## Krav

Deling og sosiale kall krever en [pakke](https://www.playdrop.ai/nb/create/learn/packaging) som bruker SDK-en. Vennefunksjoner krever en innlogget spiller. Vinduer som verten eier, setter spillet på pause; håndter [pause og gjenopptakelse](https://www.playdrop.ai/nb/create/learn/lifecycle).

## Relaterte veiledninger

- [Nettgrupper og stemme](https://www.playdrop.ai/nb/create/learn/online-party): La venner spille sammen på nett: deklarer gruppestørrelser, åpne PlayDrops gruppevindu, bli med i reserverte rom med sdk.multiplayer.join og styr romstemme.
- [Synlighet og rekkevidde](https://www.playdrop.ai/nb/create/learn/distribution): Velg hvem som kan åpne et PlayDrop-spill, se hvordan kontostandarden og versjonspublisering virker, og hvordan Boost, Spillbytte, Instant og søk gir nye spillere.
- [Topplister](https://www.playdrop.ai/nb/create/learn/leaderboards): Deklarer topplister i catalogue.json, send poengsummer med sdk.leaderboards og vis toppen og spillerens naboer. Poengtyper, grenser og oppdateringsregler.
