खिलाड़ी डेटा

आप गेम स्थिति डेटा (पूरे किए गए लेवल, अनुभव, और इन-गेम खरीदारियों सहित) को Yandex सर्वर पर सेव कर सकते हैं या उसे आपके सर्वर पर स्थानांतरित कर सकते हैं। आप उपयोगकर्ता की Yandex प्रोफ़ाइल के डेटा, जैसे उनके नाम का उपयोग करके गेम को वैयक्तीकृत भी कर सकते हैं।

Player ऑब्जेक्ट का उपयोग उपयोगकर्ता डेटा के साथ काम करने के लिए किया जाता है।

आरंभ करना

किसी Player ऑब्जेक्ट को आरंभ करने के लिए, ysdk.getPlayer() विधि का उपयोग करें:

var player;

ysdk.getPlayer().then(_player => {
        player = _player;
    }).catch(err => {
        // प्लेयर ऑब्जेक्ट आरंभ करने में त्रुटि।
    });

Player ऑब्जेक्ट को इनिशियलाइज़ करते समय निम्नलिखित डेटा पास किया जाता है:

  • यूज़र आईडी — सभी के लिए।
  • अवतार और नाम — ऑथेंटिकेटेड खिलाड़ियों के लिए।
  • प्लेटफ़ॉर्म पर खरीदारी से संबंधित डेटा (केवल इन-ऐप खरीदारी वाले गेम्स के लिए) — रूस से खिलाड़ियों के लिए।

यूज़र डेटा तक पहुंच उनके प्रोफ़ाइल में सेटिंग्स पर निर्भर करती है। अगर खिलाड़ी ने पर्सनल डेटा तक पहुंच प्रतिबंधित कर दी है, तो जवाब में केवल आईडी ही शामिल होगी।

आप उपयोगकर्ता में लॉग इन करने और अपने सर्वर पर गेम स्थिति डेटा को सेव करने के लिए वैकल्पिक signed: true पैरामीटर और fetch विधि का उपयोग कर सकते हैं। इससे आप प्लेयर को प्रमाणीकृत करने के लिए हस्ताक्षर का उपयोग कर सकते हैं और संभावित धोखाधड़ी से बच सकते हैं।

var player;

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

        // अपने सर्वर पर प्राधिकरण के लिए player.signature का उपयोग करें।
        fetch('https://your.game.server?auth', {
            method: 'POST',
            headers: { 'Content-Type': 'text/plain' },
            body: player.signature
        });
    }).catch(err => {
        // प्लेयर ऑब्जेक्ट आरंभ करने में त्रुटि।
    });

सर्वर को भेजे गए अनुरोध में signature पैरामीटर में उपयोगकर्ता की Yandex प्रोफ़ाइल और हस्ताक्षर का उनका डेटा होता है। इसमें दो Base64-एन्कोडेड स्ट्रिंग शामिल होती हैं:

<signature>.<profile data>

अधिक जानकारी के लिए, धोखाधड़ी की रोकथाम देखें।

नोट

अनुरोध को 5 मिनट में 20 बार से अधिक नहीं भेजा जा सकता, अन्यथा यह एक त्रुटि के साथ अस्वीकृत कर दिया जाएगा।

उपयोगकर्ता लॉगिन

जाँच करना कि कोई उपयोगकर्ता लॉग इन किया हुआ है कि नहीं

यह जांचने के लिए कि क्या खिलाड़ी यांडेक्स पर लॉग इन है, Player ऑब्जेक्ट के मेथड player.isAuthorized() का उपयोग करें। यह मेथड true | false रिटर्न करता है।

प्रतिबंध

मेथड player.getMode(): 'lite' | '' अब पुराना हो चुका है और भविष्य में इंटरफ़ेस से हटा दिया जाएगा।

लॉगिन डायलॉग बॉक्स का आग्रह करना

यदि प्लेयर लॉग इन नहीं है, तो आप लॉगिन डायलॉग बॉक्स को खोलने के लिए ysdk.auth.openAuthDialog() विधि का उपयोग कर सकते हैं।

सुझाव

उपयोगकर्ता को लॉग इन करने के फायदों के बारे में सूचना दें। जो उपयोगकर्ता फायदे नहीं जानते उनके द्वारा लॉग इन करने से बचने और गेम से निकल जाने की संभावना सबसे ज़्यादा होती है।

var player;

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

            return player;
        });
}

initPlayer().then(_player => {
        if (_player.isAuthorized() === false) {
            // प्लेयर लॉग इन नहीं है।
            ysdk.auth.openAuthDialog().then(() => {
                    // प्लेयर लॉग इन है
                    initPlayer().catch(err => {
                        // प्लेयर ऑब्जेक्ट आरंभ करने में त्रुटि।
                    });
                }).catch(() => {
                    // प्लेयर लॉग इन नहीं है।
                });
        }
    }).catch(err => {
        // प्लेयर ऑब्जेक्ट आरंभ करने में त्रुटि।
    });

इन-गेम डेटा

उपयोगकर्ता के इन-गेम डेटा के साथ काम करने के लिए, Player ऑब्जेक्ट विधि का उपयोग करें:

  • player.setData(data, flush): उपयोगकर्ता डेटा को सेव करता है। अधिकतम डेटा आकार 200 KB से अधिक नहीं होना चाहिए।

    • data: ऑब्जेक्ट, एक ऑब्जेक्ट जिसमें कुंजी-मान जोड़ियाँ हैं।
    • flush: बूलियन, भेजे जाने वाले डेटा का क्रम तय करता है। यदि मान "सही" है, तो डेटा तुरंत सर्वर पर भेज दिया जाता है। यदि वह "गलत" (डिफ़ॉल्ट) है, तो डेटा भेजने के अनुरोध को कतारबद्ध कर दिया जाता है।

    विधि Promise दिखाती है जो दर्शाती है कि डेटा सेव किया गया था या नहीं।

    जब पैरामीटर मान flush: false होता है, तो परिणाम केवल डेटा वैधता दिखाता है (जबकि डेटा बाद में भेजे जाने के लिए कतारबद्ध है)। हालांकि, यदि आप player.getData() का उपयोग अभी करते हैं, तो वह player.setData() द्वारा सेट किया गया नवीनतम डेटा दिखाएगा, भले ही वर्तमान डेटा अभी तक भेजा न गया हो।

    player.setData({
            achievements: ['trophy1', 'trophy2', 'trophy3'],
        }).then(() => {
            console.log('data is set');
        });
    
    
  • player.getData(keys): Yandex डेटाबेस में संग्रहित इन-गेम उपयोगकर्ता डेटा एसिंक्रोनस रूप से दिखाता है।

    • keys: श्रेणी, दिखाई जाने वाली कुंजी की सूची। यदि keys पैरामीटर गायब है, तो विधि सारा इन-गेम डेटा दिखाती है।

    विधि कुंजी-मान जोड़ी वाले ऑब्जेक्ट के साथ Promise<Object> लौटाती है।

  • player.setStats(stats): उपयोगकर्ता का अंकीय डेटा सेव करता है। अधिकतम डेटा आकार 10 KB से अधिक नहीं होना चाहिए।

    • stats: ऑब्जेक्ट, एक ऑब्जेक्ट जिसमें कुंजी-मान जोड़ियाँ हैं जहाँ प्रत्येक मान एक संख्या है।

    विधि Promise दिखाती है जो दर्शाती है कि डेटा सेव किया गया था या नहीं।

    सुझाव

    अंकीय मान के लिए जो बार-बार बदलते हैं (जैसे पॉइंट, अनुभव पॉइंट, और इन-गेम मुद्रा) के लिए, player.setData() के बजाय इस विधि का उपयोग करें।

  • player.incrementStats(increments): इन-गेम उपयोगकर्ता डेटा में बदलाव। अधिकतम डेटा आकार 10 KB से अधिक नहीं होना चाहिए।

    • increments: ऑब्जेक्ट, एक ऑब्जेक्ट जिसमें कुंजी-मान जोड़ियाँ हैं जहाँ प्रत्येक मान एक संख्या है।

    विधि बदले हुए और जोड़े गए कुंजी-मान जोड़े वाले ऑब्जेक्ट के साथ Promise<Object> लौटाती है।

  • player.getStats(keys): उपयोगकर्ता के अंकीय डेटा को एसिंक्रोनिक रूप से दिखाती है।

    • keys: श्रेणी, दिखाई जाने वाली कुंजी की सूची। यदि keys पैरामीटर गायब है, तो विधि सारा इन-गेम डेटा दिखाती है।

    विधि कुंजी-मान जोड़ी वाले ऑब्जेक्ट के साथ Promise<Object> लौटाती है।

नोट

अनुरोध भेजने की आवृत्ति सीमित है। यदि सीमाओं को पार किया जाता है, तो अनुरोधों को त्रुटि के साथ अस्वीकार कर दिया जाएगा।

उपयोगकर्ता प्रोफ़ाइल डेटा

Yandex उपयोगकर्ता प्रोफ़ाइल का डेटा पाने के लिए, Player ऑब्जेक्ट विधियों का उपयोग करें:

  • player.getUniqueID(): उपयोगकर्ता का अनन्य स्थायी ID (प्रकार: स्ट्रिंग) दिखाता है।

    नोट

    पहले उपयोग की जाने वाली player.getID() विधि अब अप्रचलित है, लेकिन वह त्रुटि कंसोल में चेतावनी देते हुए कुछ समय तक काम करना जारी रखेगी।

    player.getID() और player.getUniqueID() के मान आम तौर पर किसी दिए गए Player ऑब्जेक्ट के लिए समान नहीं होते हैं, लेकिन वे कुछ उपयोगकर्ताओं के लिए समान हो सकते हैं। यदि मान भिन्न हैं और गेम ने पहले से ही कुछ डेटा को player.getID() मान से लिंक कर दिया है, तो आपको इस डेटा को माइग्रेट करने की और उसे player.getUniqueID() के मान से लिंक करने की आवश्यकता है। सभी उपयोगकर्ताओं के लिए एक साथ डेटा को माइग्रेट करने के लिए, कृपया सहायता से संपर्क करें

  • player.getIDsPerGame(): Promise<Array> लौटाता है, जहाँ उपयोगकर्ता ID को उन सभी डेवलपर गेम में निर्दिष्ट किया जाता है जिनमें उपयोगकर्ता ने अपने व्यक्तिगत डेटा के हस्तांतरण के लिए स्पष्ट रूप से सहमति दी है। उदाहरण के लिए:

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

    चेतावनी

    अनुरोध केवल लॉग-इन किए हुए उपयोगकर्ताओं के लिए उपलब्ध है। यदि आवश्यक हो, तो प्राधिकरण का उपयोग करें।

    उपयोगकर्ता के लिए विधि उपलब्ध है कि नहीं इसकी जाँच करने के लिए, आप ysdk.isAvailableMethod('player.getIDsPerGame') विधि का उपयोग कर सकते हैं। वह Promise<Boolean>, लौटाता है, जहाँ बूलियन मान यह संकेत करता है कि विधि उपलब्ध है या नहीं।

  • player.getName(): उपयोगकर्ता का नाम (प्रकार: स्ट्रिंग) दिखाता है।

  • player.getPhoto(size): उपयोगकर्ता के अवतार का URL (प्रकार: स्ट्रिंग) लौटाता है।

    • size: स्ट्रिंग, आवश्यक आकार। संभावित मान: small, medium, large

मेथड्स की सीमाएं

विधि

विवरण

प्रतिबंध

ysdk.getPlayer()

Player ऑब्जेक्ट को आरंभ करता है

5 मिनट में 20 अनुरोध।

player.setData()

उपयोगकर्ता का डेटा संग्रहित करता है

5 मिनट में 100 अनुरोध।

player.getData()

उपयोगकर्ता के इन-गेम डेटा को असिंक्रोनस रूप से लौटाता है

player.setStats()

उपयोगकर्ता के संख्यात्मक डेटा को सहेजता है

1 मिनट में 60 अनुरोध।

player.getStats()

उपयोगकर्ता के अंकीय डेटा को एसिंक्रोनिक रूप से दिखाती है।

player.incrementStats()

उपयोगकर्ता के इन-गेम डेटा को बदलता है

iOS पर प्रगति की हानि

यदि गेम को iframe के जरिए इंटीग्रेट किया गया है, तो localStorage अक्सर नए iOS संस्करणों पर रीसेट हो सकता है, जिससे खिलाड़ी अपनी प्रगति खो सकते हैं। इससे बचने के लिए, safeStorage का उपयोग करें, जिसका इंटरफ़ेस localStorage के समान है:

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

कोड को मैन्युअल रूप से बदलने से बचने के लिए, वैश्विक स्तर पर localStorage को ओवरराइड करें।

चेतावनी

इसे ओवरराइड करने से पहले सुनिश्चित करें कि localStorage का उपयोग नहीं किया गया है।

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

यदि आप सोर्स कोड को एक आर्काइव के रूप में डाउनलोड करते हैं, तो कुछ भी करने की आवश्यकता नहीं है: SDK में एक विशेष रैपर स्वचालित रूप से localStorage को विश्वसनीय बनाता है।


नोट

टीम सपोर्ट के कर्मचारी यंडेक्स गेम्स प्लेटफॉर्म पर तैयार खेल को डालने में मदद करते हैं। डेवलपमेंट और परीक्षण के संबंध में आवेदनिक प्रश्नों का उत्तर अन्य डेवलपर्स देंगे Discord चैनल

यदि आप किसी समस्या का सामना कर रहे हैं या Yandex Games SDK के इस्तेमाल के बारे में आपका कोई प्रश्न है, तो कृपया समर्थन से संपर्क करें:

चैट करने के लिए लिखें