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 birlikteplayer.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ğerkeys
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ğerkeys
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()
veplayer.getUniqueID()
değerleri genellikle tek birPlayer
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 veriyiplayer.getID()
değerine bağlamışsa, bu veriyiplayer.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çerenPromise<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ürenysdk.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 |
|
5 dakikada 20 sorgu |
|
|
5 dakikada 100 sorgu |
|
|
||
|
1 dakikada 60 sorgu |
|
|
||
|
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: