Oyuncu verileri

Oyun durumu verilerini (tamamlanan seviyeler, deneyim, oyun içi satın almalar vb.) Yandex sunucusuna kaydedebilir veya bunları sunucunuza aktarabilirsiniz. Ayrıca, ad gibi Yandex kullanıcı profilindeki bazı verileri kullanarak oyunu kişiselleştirebilirsiniz.

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

Başlatma

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

var player;

ysdk.getPlayer().then(_player => {
        player = _player;
     }).catch(err => {
         // 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 içeren oyunlar için) — Rusya'daki oyuncular için.

Kullanıcı verilerine erişim, profil ayarlarına bağlıdır. Eğer oyuncu kişisel verilere erişimi engellediyse, yanıtta sadece kullanıcı kimliği bulunur.

Kullanıcının girişini yapmak ve oyun durumu verilerini sunucunuzda depolamak için isteğe bağlı signed: true parametresini ve fetch yöntemini uygulayabilirsiniz. Bu, oyuncunun kimliğini doğrulamak için imzayı kullanmanıza ve olası hileleri önlemenize olanak tanır.

var player;

ysdk.getPlayer({ signed: true }).then(_player => {
        player = _player;

        // Sunucunuzda giriş yapılması için player.signature kullanın.
        fetch('https://your.game.server?auth', {
            method: 'POST',
            headers: { 'Content-Type': 'text/plain' },
            body: player.signature
        });
    }).catch(err => {
        // Player nesnesinin başlatılması sırasında hata.
    });

Sunucuya gönderilen sorgunun signature parametresi, Yandex profilinden kullanıcı verilerini ve imzayı içerir. Base64 kodlu iki dize şeklindedir:

<imza>.<profil verileri>.

Daha fazla bilgi için lütfen Hile koruması bölümüne bakın.

Not

Bir istek, 5 dakika içinde en fazla 20 kere gönderilebilir, aksi takdirde hata ile reddedilecektir.

Kullanıcı girişi

Giriş kontrolü

Bir oyuncunun Yandex'te oturum açıp açmadığını kontrol etmek için Player nesnesinin player.isAuthorized() metodunu kullanın. Bu metod true | false döndürür.

Dikkat

player.getMode(): 'lite' | '' metodu artık kullanımdan kaldırılmıştır ve gelecekte arayüzden kaldırılacaktır.

Giriş yapma diyalog kutusunu çağırma

Oyuncu giriş yapmamışsa, giriş penceresini çağırmak için ysdk.auth.openAuthDialog() yöntemini kullanabilirsiniz.

Öneri

Giriş yapmanın avantajları hakkında kullanıcıyı bilgilendirin. Kullanıcı buna neden ihtiyaç duyduğunu anlamazsa, büyük olasılıkla giriş yapmayı reddedecek ve oyundan çıkacaktır.

var player;

function initPlayer() {
    return ysdk.getPlayer().then(_player => {
            player = _player;

            return player;
        });
}

initPlayer().then(_player => {
        if (_player.isAuthorized() === false) {
            // Oyuncu giriş yapmadı.
            ysdk.auth.openAuthDialog().then(() => {
                    // Oyuncu başarıyla giriş yaptı
                    initPlayer().catch(err => {
                        // Player nesnesinin başlatılması sırasında hata.
                    });
                }).catch(() => {
                    // Oyuncu giriş yapmadı.
                });
        }
    }).catch(err => {
        // Player nesnesinin başlatılması sırasında hata.
    });

Oyun içi veriler

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

  • player.setData(data, flush): Kullanıcı verilerini kaydeder. Maksimum veri boyutu 200 KB'ı geçmemelidir.

    • data – object – anahtar-değer çiftleri içeren bir nesne.
    • flush – boolean – verilerin gönderilme sırasını belirler. Değeri "true" ise, veriler sunucuya hemen gönderilir; "false" (varsayılan değer) ise veri gönderme isteği sıraya alınır.

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

    Parametre değeri flush: false ise, döndürülen değer sadece verinin geçerliliğini gösterir (gönderimin kendisi sıraya alınır ve daha sonra yapılır). Bununla birlikte player.getData() yöntemi, henüz gönderilmemiş olsa bile, player.setData() yöntemine yapılan son çağrı tarafından belirlenen verilerle yanıtlar.

    player.setData({
            achievements: ['trophy1', 'trophy2', 'trophy3'],
        }).then(() => {
            console.log('data is set');
        });
    
    
  • player.getData(keys): Kullanıcının Yandex veritabanında depolanan oyun içi verilerini asenkron bir şekilde döndürür.

    • keys – array<string> – Geri dönen anahtarların listesi. Eğer keys parametresi eksikse, yöntem tüm oyun içi kullanıcı verilerini döndürür.

    Yöntem, nesnenin anahtar-değer çiftlerini içerdiği Promise<Object> değerini döndürür.

  • player.setStats(stats): Kullanıcının sayısal verilerini kaydeder. Veri boyutu 10 KB'ı geçmemelidir.

    • stats – object: Her değerin bir sayı olması gereken anahtar-değer çiftlerini içeren bir nesne.

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

    Öneri

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

  • player.incrementStats(increments): Kullanıcının oyun içi verilerini değiştirir. Veri boyutu 10 KB'ı geçmemelidir.

    • increments – object – Her değerin bir sayı olması gereken anahtar-değer çiftleri içeren bir nesne.

    Yöntem, Promise<Object> değerini döndürür; burada nesne, değiştirilen ve eklenen anahtar-değer çiftlerini içerir.

  • player.getStats(keys): Asenkron olarak sayısal kullanıcı verilerini döndürür.

    • keys – array<string> – Geri dönen anahtarların listesi. Eğer keys parametresi eksikse, yöntem tüm oyun içi kullanıcı verilerini döndürür.

    Yöntem, nesnenin anahtar-değer çiftlerini içerdiği Promise<Object> değerini döndürür.

Not

İsteklerin gönderilme sıklığı sınırlıdır. Limitlerin aşılması durumunda istekler hata ile reddedilecektir.

Kullanıcı profili verileri

Yandex'te bir kullanıcının profilinden veri almak için Player nesnesinin yöntemlerini kullanın:

  • player.getUniqueID(): Sabit benzersiz ID'yi döndürür (tür: string).

    Not

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

    player.getID() ve player.getUniqueID() değerleri genellikle tek bir Player nesnesi için aynı değildir, ancak bazı kullanıcılar için aynı olabilir. Değerler farklıysa ve oyun kendisi daha önce herhangi bir veriyi player.getID() değerine bağlamışsa, bu veriyi player.getUniqueID() değerine bağlayarak taşımak gerekir. Tüm kullanıcılar için taşımayı bir kerede yapmak için lütfen destek ekibi ile iletişime geçin.

  • player.getIDsPerGame(): Kişisel verilerin paylaşılması için kullanıcıdan açık onay alınan tüm geliştirici oyunlarındaki kullanıcı ID'lerini içeren Promise<Array> değeri döndürülür. Örneğin,

    [
        { appID: 103915, userID: "tOpLpSh7i8QG8Voh/SuPbeS4NKTj1OxATCTKQF92H4c=" },
        { appID: 103993, userID: "bviQCIAAuVmNMP66bZzC4x+4oSFzRKpteZ/euP/Jwv4=" }
    ]
    

    Dikkat

    İstek yalnızca giriş yapmış kullanıcılar tarafından kullanılabilir. Gerekirse giriş yapın.

    Yöntemin kullanıcı için kullanılabilir olup olmadığını kontrol etmek için, mantıksal değerin yöntemin kullanılabilir olup olmadığını gösterdiği Promise<Boolean> değerini döndüren ysdk.isAvailableMethod('player.getIDsPerGame') yöntemini kullanabilirsiniz.

  • player.getName(): kullanıcı adını döndürür (tür: string).

  • player.getPhoto(size): Kullanıcı profil resminin URL'sini döndürür (tür: string).

    • size – string – istenen boyut. Olası değerler: small, medium, large.

Yöntem sınırlamaları

Yöntem

Açıklama

Sınır

ysdk.getPlayer()

Player nesnesini başlatır

5 dakikada 20 sorgu

player.setData()

Kullanıcı verilerini kaydeder

5 dakikada 100 sorgu

player.getData()

Oyun içi kullanıcı verilerini asenkron olarak döndürür

player.setStats()

Kullanıcının sayısal verilerini kaydeder

1 dakikada 60 sorgu

player.getStats()

Asenkron olarak sayısal kullanıcı verilerini döndürür

player.incrementStats()

Kullanıcının oyun içi verilerini değiştirir

iOS'ta oyundaki ilerlemeyi kaybetme

Oyun iframe aracılığıyla entegre edilmişse, localStorage iOS'un yeni sürümlerinde sık sık sıfırlanabilir ve oyuncuların ilerlemelerini kaybetmesine neden olabilir. Bunu önlemek için, localStorage ile aynı arayüze sahip olan safeStorage depolama alanını kullanın:

ysdk.getStorage().then(safeStorage => {
        safeStorage.setItem('key', 'safe storage is working');
        console.log(safeStorage.getItem('key'))
    })

Kodu manuel olarak değiştirmemek için localStorage'ı global olarak yeniden belirleyin.

Dikkat

Yeniden belirlemeden önce localStorage'ın kullanılmadığından emin olun.

ysdk.getStorage().then(safeStorage => Object.defineProperty(window, 'localStorage', { get: () => safeStorage }))
    .then(() => {
        localStorage.setItem('key', 'safe storage is working');
        console.log(localStorage.getItem('key'))
    })

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


Not

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 yanıt verir.

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

Sohbete yaz