# PlayDrop oyunları için bulut kayıtları

İlerlemeyi sdk.me.appData ve sdk.me.updateAppData ile kaydet ve yükle; misafirler ve giriş yapmış oyuncular için yazma, önizleme ve çevrimdışı kuralları.

Source: https://www.playdrop.ai/tr/create/learn/cloud-saves

Bulut kayıtları her oyuncunun oyunundaki ilerlemesini PlayDrop’ta saklar; böylece ilerleme web sitesinden uygulamalara kadar oyuncuyla gelir. Her oyuncu ve oyun için bir JSON nesnesi saklanır; sunucuya ya da çok oyunculu odaya gerek yoktur.

## Oku ve yaz

`init()` sonrasında `sdk.me.appData` kaydedilmiş anlık görüntüdür: `{ data, seq, ts_event, ts_arrival }` ya da ilk kayıttan önce `null`. Nesneni `data` içinden oku. Nesnenin tamamını, kaydedilen anlık görüntüyü döndüren ve `sdk.me.appData` değerini güncelleyen `updateAppData` ile yaz.

```js
const sdk = await playdrop.init();
let progress = { level: 1, coins: 0, ...(sdk.me.appData?.data ?? {}) };
let queue = Promise.resolve();

// Resolves with the saved snapshot; rejects when the save failed.
function save(changes) {
  progress = { ...progress, ...changes };
  const snapshot = { ...progress };
  const attempt = queue.then(() => sdk.me.updateAppData(snapshot));
  queue = attempt.catch(() => {}); // a failed save must not block the next one
  return attempt;
}

try {
  await save({ level: 2 });
  showSaved();
} catch (error) {
  showSaveError(); // progress stays in memory; the next save sends it again
}
```

- Her yazma işlemi kaydedilmiş nesnenin tamamını değiştirir: hâlâ ihtiyaç duyduğun her alanı koru.
- Yazma işlemlerini yukarıdaki gibi sıraya koy; böylece eski bir kayıt asla yenisinden sonra gelmez. Bir hatadan sonra da kuyruğu sürdür.
- “Kaydedildi” mesajını yalnızca promise tamamlandıktan sonra göster. `appData.data` değerini bellekte değiştirmek hiçbir şeyi kaydetmez.
- `appData` nesnesinin `get`, `set` veya `save` metotları yoktur.

## Ne zaman kaydetmeli

Her karede değil; kontrol noktalarında, seviye sonlarında ve satın alımlarda kaydet. Önizlemeler ya da görüntü yakalamaları sırasında asla kaydetme: yalnızca `sdk.host.phase` değeri `play` olduğunda yaz. Kaydı küçük tut ve `saveVersion: 2` gibi kendi alanınla sürümle; böylece oyunun sonraki bir sürümü onu taşıyabilir.

## Misafirler ve giriş yapmış oyuncular

Kaydetmeden önce `sdk.me.isLoggedIn` kontrolüne gerek yok: PlayDrop misafirleri de kayıtlarını korur. Hiç oturumu olmayan bir oyuncu kaydı o ziyaret boyunca bellekte tutar; yani tamamlanan bir yazma işlemi kaydın buluta ulaştığını kanıtlamaz. `isLoggedIn` değerini yalnızca satın alımlar ve barındırılan çok oyunculu mod gibi gerçek hesap gerektiren özellikler için kullan.

## Çevrimdışı

Tarayıcıda kayıtlar bağlantı gerektirir ve çevrimdışı kuyruk yoktur: hata olursa oynamaya devam et ve bir sonraki kontrol noktasında tekrar dene. Çevrimdışı çalışabilen PlayDrop uygulamaları gibi cihaz verisi desteği bildiren ana uygulamalar kayıtları cihazda tutar ve çevrimiçi olunca eşitler.

## Kayıtlar ne değildir

Kayıtlar tek bir oyuncuya ve tek bir oyuna özeldir. Kendi API’leri olan ve PlayDrop’ta görünen [liderlik tablolarından](https://www.playdrop.ai/tr/create/learn/leaderboards) ve [başarımlardan](https://www.playdrop.ai/tr/create/learn/achievements) ayrıdır. Bir maç ya da dünya gibi oyuncular arasında paylaşılan durum, oyununun MongoDB koleksiyonlarında, bir [oyun sunucusunda](https://www.playdrop.ai/tr/create/learn/game-servers) tutulur.

## Test et

Kayıtlar yüklenmiş bir oyuna aittir. En az bir kez özel bir sürüm yükle, sonra makbuzdaki `url` adresinden ya da [yapay zeka uygulamandan yayınlama](https://www.playdrop.ai/tr/create/learn/mcp-publishing) kılavuzunda anlatılan yerel Dev çerçevesinden test et.

## İlgili kılavuzlar

- [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.
- [Başarımlar](https://www.playdrop.ai/tr/create/learn/achievements): catalogue.json içinde simgeli standart ve artımlı başarımlar tanımla, bunları aç ve ilerlemeyi sdk.achievements ile bildir.
- [Gerçek zamanlı oyun sunucuları](https://www.playdrop.ai/tr/create/learn/game-servers): Oyunun için MongoDB veritabanlı, barındırılan bir Colyseus 0.17 sunucusu çalıştır, tarayıcıdan SDK ile bağlan, iki oyuncuyla test et ve sınırları öğren.
