# Partage, amis et invitations dans les jeux PlayDrop

Partagez avec image ou extrait, lisez les données de lancement, choisissez des amis, envoyez invitations et défis dans PlayDrop Chat, recommandez des jeux.

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

PlayDrop gère la feuille de partage, la liste d’amis et le chat ; votre jeu les sollicite au bon moment. Les joueurs amènent leurs amis, et ces amis arrivent directement dans votre jeu.

## Partagez le jeu

Appelez `sdk.host.share()` à la suite d’un appui ou d’un clic. Cette méthode partage la page publique du jeu avec, en option, un texte, une image ou une courte vidéo, ainsi qu’une charge utile de lancement facultative.

```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` : un Blob GIF, JPEG, PNG ou WebP de 8 MiB maximum. Les hôtes qui ne peuvent pas joindre d’images partagent uniquement le lien.
- `video` : un Blob MP4 de 15 secondes et 20 000 000 octets au maximum, à la place d’une image. Le format H.264/AAC en 1080p, en 16:9, 9:16 ou 1:1, donne les meilleurs résultats. Les hôtes sans prise en charge de la vidéo rejettent l’appel avec `host_share_video_unsupported` plutôt que de partager un simple lien.
- Préparez le Blob avant l’appui ; le générer après peut faire perdre l’autorisation de partage du navigateur.
- Vous ne pouvez pas partager une URL personnalisée ni d’autres fichiers. Le lien est toujours celui de la page du jeu.

Les erreurs liées à l’image sont `invalid_host_share_image`, `host_share_image_type` et `host_share_image_too_large`.

## Lisez la charge utile de lancement

`payload` compte jusqu’à 256 caractères base64url. Un joueur qui ouvre le lien partagé démarre le jeu avec `sdk.host.launchPayload` défini sur cette valeur, ou sur `null`. Traitez-la comme une entrée non fiable : validez-la et vérifiez sur votre serveur que le joueur peut rejoindre la salle qu’elle désigne. N’y mettez jamais d’identifiants.

## Choisissez des amis et envoyez des cartes de jeu

`sdk.social.selectFriends({ max })` ouvre le sélecteur d’amis de PlayDrop (de 1 à 10, 1 par défaut) et ne renvoie que les amis choisis par le joueur, ou `[]` s’il annule. Envoyez ensuite une carte qui apparaît dans 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` vaut `invite`, `request`, `gift`, `challenge` ou `turn`.
- `title` compte jusqu’à 80 caractères et `subtitle` jusqu’à 160.
- `expiresInSeconds` va de 60 secondes à 30 jours (la valeur par défaut).
- `clientMessageId` permet de réessayer sans risque : le réutiliser renvoie le message d’origine.
- Vous pouvez écrire aux amis que le joueur a sélectionnés, aux amis qui jouent à ce jeu et aux joueurs avec qui il échange déjà des messages de jeu. Les inconnus rencontrés lors de la recherche de partie ne peuvent pas recevoir de messages.

Lisez les cartes reçues avec `getMessages({ limit })`, de la plus ancienne à la plus récente, puis marquez chacune comme traitée avec `consumeMessage(message.id)`. L’expéditeur est `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);
}
```

Continuez avec `cursor: page.nextCursor` jusqu’à ce qu’il vaille `null`.

## Les amis qui jouent à ce jeu

`sdk.social.listGameFriends()` renvoie les amis qui ont joué récemment à ce jeu : une bonne liste pour des boutons « Jouer avec ». Elle n’expose ni la liste d’amis complète ni la présence en ligne. `openProfile(userId)` ouvre le profil d’un joueur et `openChat({ recipientUserId, draftMessage })` ouvre Chat avec un brouillon modifiable que le joueur envoie lui-même.

Un nouveau joueur arrivé par un ami peut avoir `sdk.host.launchFriend` défini. Proposez-lui de jouer avec cet ami et confirmez avec `selectFriends({ max: 1 })` ; ne démarrez jamais rien automatiquement.

## Recommandez d’autres jeux

Lors d’une pause naturelle, comme une fin de partie, `sdk.host.showGames({ games: ["@creator/name"] })` affiche les cartes PlayDrop d’un à trois autres jeux publics et met le vôtre en pause. La méthode se résout avec `played` (PlayDrop change alors de jeu) ou `dismissed`. `sdk.host.preloadGame(ref)` signale le jeu que le joueur ouvrira peut-être ensuite.

## Exigences

Le partage et les appels sociaux nécessitent un [paquet](https://www.playdrop.ai/fr/create/learn/packaging) qui utilise le SDK. Les fonctionnalités liées aux amis nécessitent un joueur connecté. Les fenêtres de l’hôte mettent le jeu en pause ; gérez [la pause et la reprise](https://www.playdrop.ai/fr/create/learn/lifecycle).

## Guides associés

- [Groupes en ligne et voix](https://www.playdrop.ai/fr/create/learn/online-party): Faites jouer des amis ensemble en ligne : tailles de groupe, fenêtre de groupe PlayDrop, salles réservées avec sdk.multiplayer.join et voix de salle.
- [Visibilité et audience](https://www.playdrop.ai/fr/create/learn/distribution): Choisissez qui peut ouvrir un jeu, gérez le réglage par défaut et les versions, et attirez des joueurs avec Boost, Échange de parties, Instantané et la recherche.
- [Classements](https://www.playdrop.ai/fr/create/learn/leaderboards): Déclarez des classements dans catalogue.json, soumettez des scores avec sdk.leaderboards, affichez le top et les voisins du joueur : types de score, limites, règles.
