# Teilen, Freunde und Einladungen in PlayDrop-Spielen

Ein Spiel mit Bild oder Clip teilen, Startdaten lesen, Freunde auswählen, Einladungen und Herausforderungen in PlayDrop Chat senden und andere Spiele empfehlen.

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

PlayDrop kümmert sich um das Teilen-Menü, die Freundesliste und den Chat; dein Spiel ruft sie im richtigen Moment auf. Spieler bringen ihre Freunde mit, und die Freunde landen in deinem Spiel.

## Das Spiel teilen

Rufe `sdk.host.share()` nach einem Tippen oder Klicken auf. Es teilt die öffentliche Seite des Spiels mit optionalem Text, einem Bild oder einem kurzen Video und optionalen Startdaten.

```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`: ein GIF-, JPEG-, PNG- oder WebP-Blob bis 8 MiB. Hosts, die keine Bilder anhängen können, teilen nur den Link.
- `video`: ein MP4-Blob von höchstens 15 Sekunden und 20.000.000 Bytes, statt eines Bildes. Am besten funktioniert H.264/AAC in 1080p im Format 16:9, 9:16 oder 1:1. Hosts ohne Videounterstützung lehnen mit `host_share_video_unsupported` ab, statt nur einen Link zu teilen.
- Bereite den Blob vor dem Tippen vor; wird er erst danach erzeugt, kann die Erlaubnis des Browsers zum Teilen verloren gehen.
- Du kannst keine eigene URL und keine anderen Dateien teilen. Der Link ist immer die Seite des Spiels.

Fehler bei Bildern sind `invalid_host_share_image`, `host_share_image_type` und `host_share_image_too_large`.

## Die Startdaten lesen

`payload` umfasst bis zu 256 base64url-Zeichen. Ein Spieler, der den geteilten Link öffnet, startet das Spiel mit `sdk.host.launchPayload` auf diesem Wert, sonst `null`. Behandle ihn als nicht vertrauenswürdige Eingabe: Prüfe ihn und kontrolliere auf deinem Server, ob der Spieler einem darin genannten Raum beitreten darf. Leg niemals Zugangsdaten hinein.

## Freunde auswählen und Spielkarten senden

`sdk.social.selectFriends({ max })` öffnet die Freundesauswahl von PlayDrop (1 bis 10, Standard 1) und liefert nur die Freunde, die der Spieler gewählt hat, oder `[]`, wenn er abbricht. Sende dann eine Karte, die in PlayDrop Chat erscheint:

```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` ist `invite`, `request`, `gift`, `challenge` oder `turn`.
- `title` hat bis zu 80 Zeichen und `subtitle` bis zu 160.
- `expiresInSeconds` liegt zwischen 60 Sekunden und 30 Tagen (Standard).
- `clientMessageId` macht eine Wiederholung sicher: Wird sie erneut verwendet, kommt die ursprüngliche Nachricht zurück.
- Du kannst Freunden schreiben, die der Spieler ausgewählt hat, Freunden, die dieses Spiel spielen, und Spielern, mit denen er schon Spielnachrichten austauscht. Fremde aus dem Matchmaking kannst du nicht anschreiben.

Lies eingehende Karten mit `getMessages({ limit })`, die älteste zuerst, und markiere dann jede mit `consumeMessage(message.id)` als erledigt. Der Absender ist `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);
}
```

Mach mit `cursor: page.nextCursor` weiter, bis der Wert `null` ist.

## Freunde, die dieses Spiel spielen

`sdk.social.listGameFriends()` liefert Freunde mit einer kürzlichen Sitzung in diesem Spiel: eine gute Liste für Buttons wie „Zusammen spielen“. Die vollständige Freundesliste oder den Online-Status gibt die Methode nicht preis. `openProfile(userId)` öffnet das Profil eines Spielers, und `openChat({ recipientUserId, draftMessage })` öffnet den Chat mit einem bearbeitbaren Entwurf, den der Spieler selbst sendet.

Bei einem neuen Spieler, der über einen Freund gekommen ist, kann `sdk.host.launchFriend` gesetzt sein. Biete an, mit diesem Freund zu spielen, und lass es mit `selectFriends({ max: 1 })` bestätigen; starte nie etwas automatisch.

## Andere Spiele empfehlen

An einer natürlichen Pause, etwa bei Game Over, zeigt `sdk.host.showGames({ games: ["@creator/name"] })` PlayDrop-Karten für ein bis drei andere öffentliche Spiele und pausiert deins. Der Aufruf liefert `played` (PlayDrop wechselt dann das Spiel) oder `dismissed`. `sdk.host.preloadGame(ref)` weist auf das Spiel hin, das der Spieler wahrscheinlich als Nächstes öffnet.

## Voraussetzungen

Teilen und soziale Aufrufe brauchen ein [Paket](https://www.playdrop.ai/de/create/learn/packaging), das das SDK nutzt. Funktionen für Freunde brauchen einen angemeldeten Spieler. Fenster des Hosts pausieren das Spiel; behandle [Pausieren und Fortsetzen](https://www.playdrop.ai/de/create/learn/lifecycle).

## Verwandte Anleitungen

- [Online-Partys und Sprachchat](https://www.playdrop.ai/de/create/learn/online-party): Freunde online zusammen spielen lassen: Partygrößen deklarieren, Party-Fenster öffnen, mit sdk.multiplayer.join reservierte Räume betreten, Sprachchat steuern.
- [Sichtbarkeit und Reichweite](https://www.playdrop.ai/de/create/learn/distribution): Wer ein PlayDrop-Spiel öffnen kann, wie Kontostandard und Versionsfreigabe funktionieren und wie Boost, Spieltausch, Sofort und Suche neue Spieler bringen.
- [Bestenlisten](https://www.playdrop.ai/de/create/learn/leaderboards): Bestenlisten in catalogue.json deklarieren, Punkte mit sdk.leaderboards senden, Spitzenplätze und Nachbarn des Spielers zeigen. Punktarten, Grenzen, Update-Regeln.
