---
metadata:
  - name: generator
    content: Diplodoc Platform v5.54.4
alternate:
  - https://yandex.com.tr/dev/games/doc/en/sdk/sdk-player.md
  - https://yandex.com.tr/dev/games/doc/hi/sdk/sdk-player.md
  - https://yandex.com.tr/dev/games/doc/ko/sdk/sdk-player.md
  - https://yandex.com.tr/dev/games/doc/ru/sdk/sdk-player.md
  - https://yandex.com.tr/dev/games/doc/tr/sdk/sdk-player.md
  - https://yandex.com.tr/dev/games/doc/vi/sdk/sdk-player.md
  - https://yandex.com.tr/dev/games/doc/zh/sdk/sdk-player.md
  - href: tr/sdk/sdk-player.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com.tr/dev/games/doc/tr/llms.txt

# Oyuncu verileri

<!-- source: tr/_includes/script-common.md -->
<!-- source: tr/_includes/script/index-js.md -->

<!-- endsource: tr/_includes/script/index-js.md -->

<!-- source: tr/_includes/script/requirements-js.md -->

<!-- endsource: tr/_includes/script/requirements-js.md -->

<!-- source: tr/_includes/script/image-modal-js.md -->

<!-- endsource: tr/_includes/script/image-modal-js.md -->
<!-- endsource: tr/_includes/script-common.md -->

Şunları yapabilirsiniz:

- Oyun verilerini (tamamlanan seviyeler, deneyim, uygulama içi satın alımlar vb.) SDK yöntemleriyle Yandex sunucusuna kaydedebilir veya kendi sunucunuza aktarabilirsiniz. Bulut kayıtları, kullanıcıların farklı cihazlarda oyuna devam etmelerine olanak tanır.
- Oyunu, Yandex kullanıcı profilindeki verilerle (örneğin ad) kişiselleştirebilirsiniz.

Kullanıcı verileriyle çalışmak için `Player` nesnesi kullanılır.

## Başlatma {#getplayer}

`Player` nesnesini başlatmak için `ysdk.getPlayer()` yöntemini kullanın:

```javascript showLineNumbers
const ysdk = await YaGames.init();

try {
    const player = await ysdk.getPlayer();
} catch (e) {
    // Player nesnesinin başlatılması sırasında hata.
}
```

`Player` nesnesi başlatılırken şu bilgiler iletilir:

- Kullanıcı kimliği — tüm oyuncular için.
- Avatar ve isim — yetkilendirilmiş oyuncular için.
- Platformdaki satın alma bilgileri (sadece [uygulama içi satın alımlar](https://yandex.com.tr/dev/games/doc/tr/console/purchases.md) içeren oyunlar için) — Rusya'daki oyuncular için.

Bu parametreler hakkında daha fazla bilgi için [Kullanıcı profili verileri](#profile-data) bölümüne bakın.

Kullanıcı verilerine erişim, [profil](https://yandex.com.tr/games/user){.external} ayarlarına bağlıdır. Eğer oyuncu kişisel verilere erişimi engellediyse, yanıtta sadece kimlik bulunur.

Kullanıcıyı yetkilendirmek ve oyun durumu verilerini kendi sunucunuzda kaydetmek için isteğe bağlı `{ signed: true }` parametresini ve `fetch()` yöntemini kullanın. Bu, [gizli anahtar](https://yandex.com.tr/dev/games/doc/tr/sdk/sdk-purchases.md#key-example) kullanarak oyuncunun kimliğini doğrulamanıza ve olası hileleri önlemenize olanak tanır. Anahtar, [uygulama içi satın alımları bağladıktan](https://yandex.com.tr/dev/games/doc/tr/console/purchases.md#connect) sonra kullanılabilir hale gelir.

```javascript showLineNumbers
const ysdk = await YaGames.init();

try {
    const player = await ysdk.getPlayer({ signed: true });

    // Kendi sunucunuzda yetkilendirme için player.signature kullanın.
    const authData = await fetch('https://your.game.server/auth', {
        method: 'POST',
        headers: { 'Content-Type': 'text/plain' },
        body: player.signature
    });
} catch (e) {
    // Player nesnesinin başlatılması veya yetkilendirme sırasında hata.
}
```

Sunucuya gönderilen sorgunun `signature` parametresi, Yandex profilinden kullanıcı verilerini ve imzayı içerir. `base64` kodlamasında iki dizeden oluşur:

```text
<imza>.<profil verileri>
```

Daha fazla bilgi için [Sahtekarlığa karşı koruma](https://yandex.com.tr/dev/games/doc/tr/sdk/sdk-purchases.md#signature) bölümüne bakın.

{% note info %}

İstek 5 dakika içinde en fazla 20 kez gönderilebilir, aksi takdirde hata ile reddedilir.

{% endnote %}


## Kullanıcı yetkilendirmesi {#auth}

### Yetkilendirme kontrolü {#auth-check}

Oyuncunun Yandex'te yetkilendirilip yetkilendirilmediğini kontrol etmek için `Player` nesnesinin `player.isAuthorized()` yöntemini kullanın. Yöntem `true | false` döndürür.

{% note alert %}

`player.getMode(): 'lite' | ''` yöntemi kullanımdan kaldırılmıştır ve daha sonra arayüzden kaldırılacaktır.

{% endnote %}


### Yetkilendirme diyalog penceresini çağırma {#open-auth-dialog}

Yetkilendirme penceresini çağırmak için `ysdk.auth.openAuthDialog()` yöntemini kullanın.

{% note warning %}

Kullanıcıyı yetkilendirmenin sağladığı avantajlar hakkında bilgilendirin. Kullanıcı bunun neden gerekli olduğunu anlamazsa, büyük olasılıkla yetkilendirmeyi reddedecek ve oyundan çıkacaktır.

Daha fazla bilgi için [Yetkilendirme teklifi](https://yandex.com.tr/dev/games/doc/tr/requirements/1/2.md#auth-offer) bölümüne bakın.

{% endnote %}


```javascript showLineNumbers
const ysdk = await YaGames.init();

try {
    let player = await ysdk.getPlayer();

    // Oyuncu yetkilendirilmemiş.
    if (!player.isAuthorized()) {
        try {
            // Yetkilendirme penceresini açma.
            await ysdk.auth.openAuthDialog();

            const authorizedPlayer = await ysdk.getPlayer();

            player = authorizedPlayer;
        } catch (e) {
            // Oyuncu yetkilendirmesi veya Player nesnesinin yeniden başlatılması sırasında hata.
        }
    }
    // Oyuncu başarıyla yetkilendirildi.
} catch (err) {
    // Player nesnesinin başlatılması sırasında hata.
}
```

## Oyun içi veriler {#ingame-data}

Oyun içi kullanıcı verileriyle çalışmak için `Player` nesnesinin yöntemlerini kullanın.

### player.setData(data, flush) {#setdata}

Kullanıcı verilerini kaydeder. Oyuncu başına maksimum veri boyutu 200&nbsp;KB'dır.

**Yöntem imzası**

```typescript
function setData(data: object, flush: boolean) => Promise<void> {}
```

Parametreleri alır:

<div class="table-25 table-2c25">

#|
|| **Parametre** | **Tür** | **Açıklama** ||
||`data` | `object` | Anahtar-değer çiftlerini içeren nesne. ||
|| `flush` | `boolean` | Veri gönderme sırasını belirler:
- `true` — veriler sunucuya hemen gönderilir.
- `false` (varsayılan değer) — veri gönderme isteği kuyruğa alınır. ||
|#

</div>

Yöntem, verilerin başarıyla kaydedilip kaydedilmediğini gösteren `Promise` döndürür.

`flush: false` parametre değerinde, döndürülen sonuç yalnızca veri geçerliliğini gösterir (gönderimin kendisi sıraya alınır ve daha sonra gerçekleştirilir). Bu durumda `player.getData()` yöntemi, henüz gönderilmemiş olsa bile son `player.setData()` çağrısıyla belirlenen verileri döndürür.

{% note info %}

İstek 5 dakika içinde en fazla 100 kez gönderilebilir, aksi takdirde hata ile reddedilir.

{% endnote %}

#### Örnek {#example-setdata}

```javascript showLineNumbers
const ysdk = await YaGames.init();

const player = await ysdk.getPlayer();

await player.setData({
    achievements: ['trophy1', 'trophy2', 'trophy3'],
})

console.log('data is set');
```

### player.getData(keys) {#getdata}

Yandex veritabanında kaydedilen oyun içi kullanıcı verilerini asenkron olarak döndürür.

**Yöntem imzası**

```typescript
function getData(keys?: Array<string>) => Promise<object> {}
```

Parametre alır:

<div class="table-25 table-2c25">

#|
|| **Parametre** | **Tür** | **Açıklama** ||
|| `keys` | `Array<string>` | Döndürülmesi gereken anahtarların listesi. `keys` parametresi yoksa, metot kullanıcının tüm oyun içi verilerini döndürür. ||
|#

</div>

Yöntem, anahtar-değer çiftlerini içeren `Promise<object>` döndürür.

{% note info %}

İstek 5 dakika içinde en fazla 100 kez gönderilebilir, aksi takdirde hata ile reddedilir.

{% endnote %}

### player.setStats(stats) {#setstats}

Kullanıcının sayısal verilerini kaydeder. Oyuncu başına maksimum sayısal veri boyutu 10&nbsp;KB'dır.

{% note tip %}

Sık değişen sayısal değerler (puanlar, deneyim puanları, oyun içi para birimi) için [player.setData()](#ingame-data) yerine bu yöntemi kullanın.

{% endnote %}

**Yöntem imzası**

```typescript
function setStats(stats?: object) => Promise<void> {}
```

Parametre alır:

<div class="table-25 table-2c25">

#|
|| **Parametre** | **Tür** | **Açıklama** ||
|| `stats` | `object` | Her değerin sayı olması gereken anahtar-değer çiftlerini içeren nesne. ||
|#

</div>

Yöntem, verilerin başarıyla kaydedilip kaydedilmediğini gösteren `Promise` döndürür.

{% note info %}

İstek 1 dakika içinde en fazla 60 kez gönderilebilir, aksi takdirde hata ile reddedilir.

{% endnote %}

### player.incrementStats(increments) {#incrementstats}

Kullanıcının sayısal verilerini değiştirir. Oyuncu başına maksimum sayısal veri boyutu 10&nbsp;KB'dır.

**Yöntem imzası**

```typescript
function incrementStats(increments: object) => Promise<object> {}
```

Parametre alır:

<div class="table-25 table-2c25">

#|
|| **Parametre** | **Tür** | **Açıklama** ||
|| `increments` | `object` | Her değerin sayı olması gereken anahtar-değer çiftlerini içeren nesne. ||
|#

</div>

Yöntem, değiştirilen ve eklenen anahtar-değer çiftlerini içeren `Promise<object>` döndürür.

{% note info %}

İstek 1 dakika içinde en fazla 60 kez gönderilebilir, aksi takdirde hata ile reddedilir.

{% endnote %}

### player.getStats(keys) {#getstats}

Kullanıcının sayısal verilerini asenkron olarak döndürür.

**Yöntem imzası**

```typescript
function getStats(keys?: Array<string>) => Promise<object> {}
```

Parametre alır:

<div class="table-25 table-2c25">

#|
|| **Parametre** | **Tür** | **Açıklama** ||
|| `keys` | `Array<string>` | Döndürülmesi gereken anahtarların listesi. `keys` parametresi yoksa, metot kullanıcının tüm sayısal verilerini döndürür. ||
|#

</div>

Yöntem, anahtar-değer çiftlerini içeren `Promise<object>` döndürür.

{% note info %}

İstek 1 dakika içinde en fazla 60 kez gönderilebilir, aksi takdirde hata ile reddedilir.

{% endnote %}


## Kullanıcı profili verileri {#profile-data}

Yandex kullanıcı profilinden veri almak için `Player` nesnesinin yöntemlerini kullanın.

### player.getUniqueID() {#getuniqueid}

Kullanıcının kalıcı benzersiz kimliğini döndürür.

**Yöntem imzası**

```typescript
function getUniqueID() => string {}
```

{% note info %}

`player.getID()` yöntemi kullanımdan kaldırılmıştır, ancak hata konsolunda uyarı ile bir süre daha çalışmaya devam edecektir.

`player.getID()` ve `player.getUniqueID()` değerleri genel olarak tek bir `Player` nesnesi için eşleşmez, ancak bazı kullanıcılar için aynı olabilir. Değerler farklıysa ve oyun daha önce `player.getID()` değerine herhangi bir veri bağlamışsa, bu verileri `player.getUniqueID()` değerine bağlayarak taşıma yapın. Tüm kullanıcılar için taşımayı aynı anda gerçekleştirmek için [destek hizmetine](https://yandex.com.tr/dev/games/doc/tr/concepts/troubleshooting.md) yazın.

{% endnote %}


### player.getIDsPerGame() {#getidspergame}

{% note alert %}

İstek yalnızca yetkilendirilmiş kullanıcılar için kullanılabilir. Yetkilendirme durumunu nasıl kontrol edeceğinizi ve giriş diyalogunu nasıl çağıracağınızı öğrenmek için [Kullanıcı yetkilendirmesi](#auth) bölümüne bakın.

İsteği göndermeden önce `ysdk.isAvailableMethod('player.getIDsPerGame')` ile yöntemin kullanılabilirliğini kontrol edin. Yöntem `Promise<Boolean>` döndürür.

{% endnote %}

Yöntem, kullanıcının kişisel verilerin aktarılmasına açıkça izin verdiği geliştiricinin tüm oyunlarındaki kullanıcı kimliklerini belirten nesneler dizisini döndürür.

**Yöntem imzası**

```typescript
function getIDsPerGame() => Promise<Array<{ appID: number, userID: string }>> {}
```

### player.getName() {#getname}

Kullanıcı adını döndürür.

**Yöntem imzası**

```typescript
function getName() => string {}
```

### player.getPhoto() {#getphoto}

İstenen görüntü boyutuna bağlı olarak kullanıcı avatarının URL'sini döndürür.

**Yöntem imzası**

```typescript
function getPhoto(size: 'small' | 'medium' | 'large') => string {}
```

### player.getPayingStatus() {#getpayingstatus}

Kullanıcının satın alma sıklığına ve hacmine bağlı bir değer döndürür.

**Yöntem imzası**

```typescript
function getPayingStatus() => EPayingStatus {}
```

`EPayingStatus` şu değerlerden birini alır:

#|
|| **Değer** | **Açıklama** ||
|| `paying` | Kullanıcı son bir ay içinde 500 ruble'den fazla portal para birimi satın aldı. ||
|| `partially_paying` | Kullanıcının son bir yıl içinde gerçek parayla en az bir portal para birimi satın alımı oldu. ||
|| `not_paying` | Kullanıcı son bir yıl içinde gerçek parayla portal para birimi satın almadı. ||
|| `unknown` | Kullanıcı Rusya'dan değil veya bu bilgilerin geliştiriciye aktarılmasına izin vermedi. ||
|#

#### Örnek {#example-status}

```javascript showLineNumbers
const ysdk = await YaGames.init(); // SDK'yı başlatıyoruz.
const player = await ysdk.getPlayer(); // Oyuncuyu alıyoruz.
const payingStatus = player.getPayingStatus(); // Kullanıcının platformdaki ödeme etkinliği durumunu alıyoruz.

if (payingStatus === 'paying' || payingStatus === 'partially_paying') {
    // Başlangıçta veya reklam yerine uygulama içi ürün önerin.
}
```

## Yöntem sınırlamaları {#limits}

#|
|| **Metot** | **Açıklama** | **Limit** ||
|| `ysdk.getPlayer()` | [`Player` nesnesini başlatır](#getplayer) |::{align="center"} 5 dakikada 20 istek ||
|| `player.setData()` | [Kullanıcı verilerini kaydeder](#setdata) |::{align="center"} 5 dakikada 100 istek ||
|| `player.getData()` | [Kullanıcının oyun içi verilerini asenkron olarak döndürür](#getdata) | ^ ||
|| `player.setStats()` | [Kullanıcının sayısal verilerini kaydeder](#setstats) |::{align="center"} 1 dakikada 60 istek ||
|| `player.getStats()` | [Kullanıcının sayısal verilerini asenkron olarak döndürür](#getstats) | ^ ||
|| `player.incrementStats()` | [Kullanıcının sayısal verilerini değiştirir](#incrementstats) | ^ ||
|#

## iOS'ta ilerleme kaybı {#progress-loss}

Oyun entegrasyonu için kendi alan adınızı kullanıyorsanız, `localStorage` depolama alanı iOS'un yeni sürümlerinde sık sık sıfırlanabilir ve oyuncular ilerlemelerini kaybedebilir. Bunu önlemek için `localStorage` ile aynı arayüze sahip `safeStorage` depolama alanını kullanın:

```javascript showLineNumbers
const ysdk = await YaGames.init();

const safeStorage = await ysdk.getStorage();

safeStorage.setItem('key', 'safe storage is working');
console.log(safeStorage.getItem('key'));
```

Kodu manuel olarak değiştirmemek için `localStorage`'ı global olarak yeniden tanımlayın.

{% note alert %}

Yeniden tanımlamadan önce `localStorage`'ın kullanılmadığından emin olun.

{% endnote %}


```javascript showLineNumbers
const ysdk = await YaGames.init();

const safeStorage = await ysdk.getStorage();

Object.defineProperty(window, 'localStorage', { get: () => safeStorage });

localStorage.setItem('key', 'safe storage is working');
console.log(localStorage.getItem('key'));
```

Kaynak kodu arşiv olarak yüklüyorsanız, hiçbir şey yapmanıza gerek yoktur: SDK'daki özel sarmalayıcı otomatik olarak `localStorage`'ı güvenilir hale getirir.


## Sorun giderme {#faq}

#### Kayıt boyutu SDK limitlerini aşarsa ne yapmalı? {#large-saves}

SDK yöntemlerinin oyuncu başına maksimum veri boyutu sınırları vardır:

#|
|| **Yöntem** | **Açıklama** | **Limit** ||
|| `player.setData()` | [Kullanıcı verileri](#setdata) | 200 KB ||
|| `player.setStats()` | [İstatistikler (sayısal değerler)](#setstats) | 10 KB ||
|#

Oyununuzun daha fazla veri kaydetmesi gerekiyorsa (örneğin, çok sayıda birim veya karmaşık dünya durumuna sahip strateji oyunlarında), ilerlemeyi saklamak için kendi sunucunuzu kullanın. Veri depolama yöntemleri hakkında daha fazla bilgi için [İlerleme nerede kaydedilmeli](https://yandex.com.tr/dev/games/doc/tr/requirements/1/9.md#save-location) bölümüne bakın.

#### Oyuncu ilerlemesi kod aracılığıyla nasıl sıfırlanır? {#reset-progress}

Oyuncu verilerini temizlemek için [player.setData()](#setdata) ve [player.setStats()](#setstats) yöntemlerini kullanarak boş ilerleme yazın.

İlerleme sıfırlamayı test etmek için [debug panelindeki](https://yandex.com.tr/dev/games/doc/tr/console/debug-panel.md#cloud-icon) ☁️ **Clear cloud data** butonunu da kullanabilirsiniz.


---

<!-- source: tr/_includes/sdk-support.md -->
{% note info %}

Destek ekibi, hazır oyunu Yandex Oyun platformuna yerleştirmenize yardımcı olur. Geliştirme ve test etme konularındaki uygulamalı sorulara ise diğer geliştiriciler [Discord Topluluğu](https://discord.com/invite/wU4p3whr4T){.external} yanıt verir.

{% endnote %}

Yandex Games SDK kullanırken sorunla karşılaşırsanız veya sorunuz varsa, lütfen destek ekibiyle iletişime geçin:

<!-- source: tr/_includes/button-chat.md -->
<a href="https://yandex.com/chat/#/user/a4fa5c06-75db-9b38-6eea-b1673785f7d5">
  <span class="button">Sohbete yaz</span>
</a>
<!-- endsource: tr/_includes/button-chat.md -->
<!-- endsource: tr/_includes/sdk-support.md -->
