Oyuncu verileri
Oyun verilerini (tamamlanan seviyeler, deneyim, uygulama içi satın alımlar vb.) Yandex sunucusuna kaydedebilir veya kendi sunucunuza aktarabilir, ayrıca Yandex kullanıcı profilindeki verilerle (örneğin ad) oyunu kişiselleştirebilirsiniz. Bulut kayıtları, kullanıcıların farklı cihazlarda oyuna devam etmelerine olanak tanır.
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:
1const ysdk = await YaGames.init();
2
3try {
4 const player = await ysdk.getPlayer();
5} catch (e) {
6 // Player nesnesinin başlatılması sırasında hata.
7}
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.
Bu parametreler hakkında daha fazla bilgi için Kullanıcı profili verileri bölümüne bakın.
Kullanıcı verilerine erişim, profil 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 uygulayabilirsiniz. Bu, oyuncunun kimliğini doğrulamak için imzayı kullanmanıza ve olası hileleri önlemenize olanak tanır.
1const ysdk = await YaGames.init();
2
3try {
4 const player = await ysdk.getPlayer({ signed: true });
5
6 // Kendi sunucunuzda yetkilendirme için player.signature kullanın.
7 const authData = await fetch('https://your.game.server/auth', {
8 method: 'POST',
9 headers: { 'Content-Type': 'text/plain' },
10 body: player.signature
11 });
12} catch (e) {
13 // Player nesnesinin başlatılması veya yetkilendirme sırasında hata.
14}
Sunucuya gönderilen sorgunun signature parametresi, Yandex profilinden kullanıcı verilerini ve imzayı içerir. base64 kodlamasında iki dizeden oluşur:
<imza>.<profil verileri>
Daha fazla bilgi için Sahtekarlığa karşı koruma bölümüne bakın.
Not
İstek 5 dakika içinde en fazla 20 kez gönderilebilir, aksi takdirde hata ile reddedilir.
Kullanıcı yetkilendirmesi
Yetkilendirme kontrolü
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.
Dikkat
player.getMode(): 'lite' | '' yöntemi kullanımdan kaldırılmıştır ve daha sonra arayüzden kaldırılacaktır.
Yetkilendirme diyalog penceresini çağırma
Yetkilendirme penceresini çağırmak için ysdk.auth.openAuthDialog() yöntemini kullanın.
Öneri
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.
1const ysdk = await YaGames.init();
2
3try {
4 let player = await ysdk.getPlayer();
5
6 // Oyuncu yetkilendirilmemiş.
7 if (!player.isAuthorized()) {
8 try {
9 // Yetkilendirme penceresini açma.
10 await ysdk.auth.openAuthDialog();
11
12 const authorizedPlayer = await ysdk.getPlayer();
13
14 player = authorizedPlayer;
15 } catch (e) {
16 // Oyuncu yetkilendirmesi veya Player nesnesinin yeniden başlatılması sırasında hata.
17 }
18 }
19 // Oyuncu başarıyla yetkilendirildi.
20} catch (err) {
21 // Player nesnesinin başlatılması sırasında hata.
22}
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. Oyuncu başına maksimum veri boyutu 200 KB'dır.
Yöntem imzası:
function setData(data: object, flush: boolean) => Promise<void> {}
Parametreler alınır:
|
Parametre |
Tür |
Açıklama |
|
|
|
Anahtar-değer çiftlerini içeren nesne. |
|
|
|
Veri gönderme sırasını belirler:
|
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.
Not
İstek 5 dakika içinde en fazla 100 kez gönderilebilir, aksi takdirde hata ile reddedilir.
Örnek
1const ysdk = await YaGames.init();
2
3const player = await ysdk.getPlayer();
4
5await player.setData({
6 achievements: ['trophy1', 'trophy2', 'trophy3'],
7})
8
9console.log('data is set');
player.getData(keys)
Yandex veritabanında kaydedilen oyun içi kullanıcı verilerini asenkron olarak döndürür.
Yöntem imzası:
function getData(keys?: Array<string>) => Promise<object> {}
Parametre alır:
|
Parametre |
Tür |
Açıklama |
|
|
|
Döndürülmesi gereken anahtarların listesi. |
Yöntem, anahtar-değer çiftlerini içeren Promise<object> döndürür.
Not
İstek 5 dakika içinde en fazla 100 kez gönderilebilir, aksi takdirde hata ile reddedilir.
player.setStats(stats)
Kullanıcının sayısal verilerini kaydeder. Oyuncu başına maksimum sayısal veri boyutu 10 KB'dı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.
Yöntem imzası:
function setStats(stats?: object) => Promise<void> {}
Parametre alır:
|
Parametre |
Tür |
Açıklama |
|
|
|
Her değerin sayı olması gereken anahtar-değer çiftlerini içeren nesne. |
Yöntem, verilerin başarıyla kaydedilip kaydedilmediğini gösteren Promise döndürür.
Not
İstek 1 dakika içinde en fazla 60 kez gönderilebilir, aksi takdirde hata ile reddedilir.
player.incrementStats(increments)
Kullanıcının sayısal verilerini değiştirir. Oyuncu başına maksimum sayısal veri boyutu 10 KB'dır.
Yöntem imzası:
function incrementStats(increments: object) => Promise<object> {}
Parametre alır:
|
Parametre |
Tür |
Açıklama |
|
|
|
Her değerin sayı olması gereken anahtar-değer çiftlerini içeren nesne. |
Yöntem, değiştirilen ve eklenen anahtar-değer çiftlerini içeren Promise<object> döndürür.
Not
İstek 1 dakika içinde en fazla 60 kez gönderilebilir, aksi takdirde hata ile reddedilir.
player.getStats(keys)
Kullanıcının sayısal verilerini asenkron olarak döndürür.
Yöntem imzası:
function getStats(keys?: Array<string>) => Promise<object> {}
Parametre alır:
|
Parametre |
Tür |
Açıklama |
|
|
|
Döndürülmesi gereken anahtarların listesi. |
Yöntem, anahtar-değer çiftlerini içeren Promise<object> döndürür.
Not
İstek 1 dakika içinde en fazla 60 kez gönderilebilir, aksi takdirde hata ile reddedilir.
Kullanıcı profili verileri
Yandex kullanıcı profilinden veri almak için Player nesnesinin yöntemlerini kullanın.
player.getUniqueID()
Kullanıcının kalıcı benzersiz kimliğini döndürür.
Yöntem imzası:
function getUniqueID() => string {}
Not
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 yazın.
player.getIDsPerGame()
Dikkat
İ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 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.
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ı:
function getIDsPerGame() => Promise<Array<{ appID: number, userID: string }>> {}
player.getName()
Kullanıcı adını döndürür.
Yöntem imzası:
function getName() => string {}
player.getPhoto()
İstenen görüntü boyutuna bağlı olarak kullanıcı avatarının URL'sini döndürür.
Yöntem imzası:
function getPhoto(size: 'small' | 'medium' | 'large') => string {}
player.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ı:
function getPayingStatus() => EPayingStatus {}
EPayingStatus şu değerlerden birini alır:
|
Değer |
Açıklama |
|
|
Kullanıcı son bir ay içinde 500 ruble'den fazla portal para birimi satın aldı. |
|
|
Kullanıcının son bir yıl içinde gerçek parayla en az bir portal para birimi satın alımı oldu. |
|
|
Kullanıcı son bir yıl içinde gerçek parayla portal para birimi satın almadı. |
|
|
Kullanıcı Rusya'dan değil veya bu bilgilerin geliştiriciye aktarılmasına izin vermedi. |
Örnek
1const ysdk = await YaGames.init(); // SDK'yı başlatıyoruz.
2const player = await ysdk.getPlayer(); // Oyuncuyu alıyoruz.
3const payingStatus = player.getPayingStatus(); // Kullanıcının platformdaki ödeme etkinliği durumunu alıyoruz.
4
5if (payingStatus === 'paying' || payingStatus === 'partially_paying') {
6 // Başlangıçta veya reklam yerine uygulama içi ürün önerin.
7}
Yöntem sınırlamaları
|
Metot |
Açıklama |
Limit |
|
|
5 dakikada 20 istek |
|
|
|
5 dakikada 100 istek |
|
|
|
||
|
|
1 dakikada 60 istek |
|
|
|
||
|
|
iOS'ta ilerleme kaybı
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:
1const ysdk = await YaGames.init();
2
3const safeStorage = await ysdk.getStorage();
4
5safeStorage.setItem('key', 'safe storage is working');
6console.log(safeStorage.getItem('key'));
Kodu manuel olarak değiştirmemek için localStorage'ı global olarak yeniden tanımlayın.
Dikkat
Yeniden tanımlamadan önce localStorage'ın kullanılmadığından emin olun.
1const ysdk = await YaGames.init();
2
3const safeStorage = await ysdk.getStorage();
4
5Object.defineProperty(window, 'localStorage', { get: () => safeStorage });
6
7localStorage.setItem('key', 'safe storage is working');
8console.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.
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: