# PlayDrop oyunlarında paylaşım, arkadaşlar ve davetler

Oyunu görsel ya da kliple paylaş, başlatma verisini oku, arkadaş seç, PlayDrop Sohbet’te davet ve meydan okuma kartları gönder, başka oyunlar öner.

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

Paylaşım panelini, arkadaş listesini ve sohbeti PlayDrop yönetir; oyunun bunları doğru anda ister. Oyuncular arkadaşlarını getirir ve arkadaşlar doğrudan oyununa gelir.

## Oyunu paylaş

`sdk.host.share()` çağrısını bir dokunma ya da tıklamadan yap. Oyunun herkese açık sayfasını isteğe bağlı metin, bir görsel ya da kısa bir video ve isteğe bağlı bir başlatma verisiyle paylaşır.

```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 fazla 8 MiB boyutunda GIF, JPEG, PNG ya da WebP Blob. Görsel ekleyemeyen ana uygulamalar yalnızca bağlantıyı paylaşır.
- `video`: görsel yerine en fazla 15 saniye ve 20.000.000 bayt boyutunda bir MP4 Blob. 16:9, 9:16 ya da 1:1 oranında 1080p H.264/AAC en iyi sonucu verir. Video desteği olmayan ana uygulamalar düz bir bağlantı paylaşmak yerine `host_share_video_unsupported` ile reddeder.
- Blob’u dokunmadan önce hazırla; dokunmadan sonra oluşturmak tarayıcının paylaşma iznini kaybettirebilir.
- Özel bir URL ya da başka dosyalar paylaşamazsın. Bağlantı her zaman oyunun sayfasıdır.

Görsel hataları `invalid_host_share_image`, `host_share_image_type` ve `host_share_image_too_large` kodlarıdır.

## Başlatma verisini oku

`payload` en fazla 256 base64url karakteridir. Paylaşılan bağlantıyı açan oyuncu, oyunu `sdk.host.launchPayload` bu değere ya da `null` değerine ayarlanmış olarak başlatır. Onu güvenilmeyen girdi olarak ele al: doğrula ve oyuncunun, verinin belirttiği bir odaya katılıp katılamayacağını sunucunda kontrol et. İçine asla kimlik bilgisi koyma.

## Arkadaş seç ve oyun kartları gönder

`sdk.social.selectFriends({ max })` PlayDrop’un arkadaş seçicisini açar (1 ile 10 arası, varsayılan 1) ve yalnızca oyuncunun seçtiği arkadaşları ya da oyuncu iptal ederse `[]` döndürür. Sonra PlayDrop Sohbet’te görünen bir kart gönder:

```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` değeri `invite`, `request`, `gift`, `challenge` ya da `turn` olur.
- `title` en fazla 80, `subtitle` en fazla 160 karakterdir.
- `expiresInSeconds` 60 saniye ile 30 gün (varsayılan) arasındadır.
- `clientMessageId` tekrar denemeyi güvenli kılar: onu yeniden kullanmak özgün mesajı döndürür.
- Oyuncunun seçtiği arkadaşlara, bu oyunu oynayan arkadaşlara ve oyuncunun zaten oyun mesajlaştığı oyunculara mesaj gönderebilirsin. Eşleştirmede karşılaşılan yabancılara mesaj gönderilemez.

Gelen kartları en eskiden başlayarak `getMessages({ limit })` ile oku, sonra her birini `consumeMessage(message.id)` ile işlendi olarak işaretle. Gönderen `message.from.id` değeridir.

```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);
}
```

`null` olana kadar `cursor: page.nextCursor` ile devam et.

## Bu oyunu oynayan arkadaşlar

`sdk.social.listGameFriends()` bu oyunda yakın zamanda oturumu olan arkadaşları döndürür: “birlikte oyna” düğmeleri için iyi bir liste. Arkadaş listesinin tamamını ya da çevrimiçi durumunu göstermez. `openProfile(userId)` bir oyuncunun profilini açar, `openChat({ recipientUserId, draftMessage })` ise oyuncunun kendisinin göndereceği düzenlenebilir bir taslakla Sohbet’i açar.

Bir arkadaşı üzerinden gelen yeni bir oyuncuda `sdk.host.launchFriend` ayarlı olabilir. Onunla oynamayı öner ve `selectFriends({ max: 1 })` ile onayla; asla bir şeyi otomatik başlatma.

## Başka oyunlar öner

Oyun bitişi gibi doğal bir arada `sdk.host.showGames({ games: ["@creator/name"] })`, herkese açık bir ila üç başka oyun için PlayDrop kartları gösterir ve seninkini duraklatır. `played` (PlayDrop ardından oyunu değiştirir) ya da `dismissed` ile tamamlanır. `sdk.host.preloadGame(ref)`, oyuncunun bir sonraki açabileceği oyunu önceden bildirir.

## Gereksinimler

Paylaşım ve sosyal çağrılar SDK’yı kullanan bir [paket](https://www.playdrop.ai/tr/create/learn/packaging) gerektirir. Arkadaş özellikleri giriş yapmış bir oyuncu gerektirir. Ana uygulamanın pencereleri oyunu duraklatır; [duraklatma ve sürdürmeyi](https://www.playdrop.ai/tr/create/learn/lifecycle) ele al.

## İlgili kılavuzlar

- [Çevrimiçi partiler ve sesli sohbet](https://www.playdrop.ai/tr/create/learn/online-party): Arkadaşlar oyununu çevrimiçi oynasın: parti boyutlarını bildir, parti penceresini aç, sdk.multiplayer.join ile ayrılmış odaya katıl, oda sesli sohbetini yönet.
- [Görünürlük ve erişim](https://www.playdrop.ai/tr/create/learn/distribution): PlayDrop oyununu kimlerin açabileceğini seç; hesap varsayılanı ve sürüm yayınlama nasıl işler, Boost, oyun takası, Instant ve arama nasıl yeni oyuncu getirir.
- [Liderlik tabloları](https://www.playdrop.ai/tr/create/learn/leaderboards): catalogue.json’da liderlik tabloları tanımla, sdk.leaderboards ile puan gönder, en iyileri ve oyuncunun komşularını göster. Puan türleri, sınırlar ve kurallar.
