# Delen, vrienden en uitnodigingen in PlayDrop-games

Deel een game met een afbeelding of clip, lees startpayloads, kies vrienden, stuur uitnodigings- en uitdagingskaarten in PlayDrop Chat en raad andere games aan.

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

PlayDrop regelt het deelvenster, de vriendenlijst en de chat; je game vraagt er op het juiste moment om. Spelers brengen hun vrienden mee, en die vrienden komen in je game terecht.

## De game delen

Roep `sdk.host.share()` aan vanuit een tik of klik. Het deelt de openbare pagina van de game met optionele tekst, een afbeelding of een korte video, en een optionele startpayload.

```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`: een GIF-, JPEG-, PNG- of WebP-Blob tot 8 MiB. Hosts die geen afbeeldingen kunnen bijvoegen, delen alleen de link.
- `video`: een MP4-Blob van maximaal 15 seconden en 20.000.000 bytes, in plaats van een afbeelding. H.264/AAC in 1080p in 16:9, 9:16 of 1:1 werkt het best. Hosts zonder ondersteuning voor video weigeren met `host_share_video_unsupported` in plaats van een gewone link te delen.
- Maak de Blob klaar vóór de tik; als je hem na de tik genereert, kan de browser de toestemming om te delen intrekken.
- Je kunt geen eigen URL of andere bestanden delen. De link is altijd de pagina van de game.

Fouten bij afbeeldingen zijn `invalid_host_share_image`, `host_share_image_type` en `host_share_image_too_large`.

## De startpayload lezen

`payload` is maximaal 256 base64url-tekens. Een speler die de gedeelde link opent, start de game met `sdk.host.launchPayload` ingesteld op die waarde, of op `null`. Behandel het als onbetrouwbare invoer: valideer het en controleer op je server of de speler mag meedoen in een kamer die erin wordt genoemd. Zet er nooit inloggegevens in.

## Vrienden kiezen en gamekaarten sturen

`sdk.social.selectFriends({ max })` opent de vriendenkiezer van PlayDrop (1 tot 10, standaard 1) en geeft alleen de vrienden terug die de speler heeft gekozen, of `[]` als die annuleert. Stuur daarna een kaart die in PlayDrop Chat verschijnt:

```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` is `invite`, `request`, `gift`, `challenge` of `turn`.
- `title` is maximaal 80 tekens en `subtitle` maximaal 160.
- `expiresInSeconds` is 60 seconden tot 30 dagen (de standaard).
- `clientMessageId` maakt opnieuw proberen veilig: hergebruik geeft het oorspronkelijke bericht terug.
- Je kunt berichten sturen aan vrienden die de speler heeft gekozen, vrienden die deze game spelen en spelers met wie de speler al gameberichten uitwisselt. Onbekenden uit matchmaking kun je geen bericht sturen.

Lees binnenkomende kaarten met `getMessages({ limit })`, oudste eerst, en markeer daarna elke kaart als afgehandeld met `consumeMessage(message.id)`. De afzender is `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);
}
```

Ga door met `cursor: page.nextCursor` tot die `null` is.

## Vrienden die deze game spelen

`sdk.social.listGameFriends()` geeft vrienden terug met een recente sessie in deze game: een goede lijst voor knoppen om samen te spelen. Het toont niet de volledige vriendenlijst of wie er online is. `openProfile(userId)` opent het profiel van een speler en `openChat({ recipientUserId, draftMessage })` opent Chat met een bewerkbaar concept dat de speler zelf verstuurt.

Bij een nieuwe speler die via een vriend is gekomen, kan `sdk.host.launchFriend` zijn ingesteld. Bied aan om samen te spelen en bevestig met `selectFriends({ max: 1 })`; start nooit iets automatisch.

## Andere games aanraden

Op een natuurlijk rustmoment, zoals bij game-over, toont `sdk.host.showGames({ games: ["@creator/name"] })` PlayDrop-kaarten voor één tot drie andere openbare games en pauzeert het jouw game. Het wordt afgerond met `played` (PlayDrop schakelt dan van game) of `dismissed`. `sdk.host.preloadGame(ref)` geeft een hint over de game die de speler misschien als volgende opent.

## Vereisten

Delen en sociale aanroepen hebben een [pakket](https://www.playdrop.ai/nl/create/learn/packaging) nodig dat de SDK gebruikt. Functies voor vrienden vereisen een ingelogde speler. Vensters van de host pauzeren de game; handel [pauzeren en hervatten](https://www.playdrop.ai/nl/create/learn/lifecycle) af.

## Gerelateerde gidsen

- [Onlinegroepen en spraak](https://www.playdrop.ai/nl/create/learn/online-party): Laat vrienden je game samen online spelen: geef groepsgroottes op, open het groepsvenster van PlayDrop, neem gereserveerde plaatsen in kamers in en regel kamerspraak.
- [Zichtbaarheid en bereik](https://www.playdrop.ai/nl/create/learn/distribution): Kies wie een PlayDrop-game kan openen, hoe de accountstandaard en versies publiceren werken, en hoe Boost, Speelruil, Instant en zoeken nieuwe spelers brengen.
- [Ranglijsten](https://www.playdrop.ai/nl/create/learn/leaderboards): Declareer ranglijsten in catalogue.json, verstuur scores met sdk.leaderboards en toon de top en de buren van de speler. Scoretypen, limieten en updateregels.
