C++ के लिए Play Games की सेवाओं का इस्तेमाल शुरू करना

Google Play गेम सेवाएं C++ SDK, Google Play गेम सेवाओं के साथ उपयोग करने के लिए C++ API प्रदान करता है और यह उन डेवलपर के लिए है जिनके पास अपने गेम का मौजूदा C++ क्रियान्वयन है.

फ़िलहाल, SDK टूल इन सेवाओं को लागू करता है:

  • अनुमति देना
  • उपलब्धियां
  • लीडरबोर्ड
  • इवेंट
  • सेव किए गए गेम
  • Nearby कनेक्शन (सिर्फ़ Android पर)
  • खिलाड़ी के आंकड़े

कॉन्सेप्ट

बड़े लेवल पर, SDK टूल का इस्तेमाल करने के लिए यह तरीका अपनाएं:

  1. Android के लिए प्लैटफ़ॉर्म कॉन्फ़िगरेशन सेट अप करें.
  2. GameServices ऑब्जेक्ट को कॉन्फ़िगर करने और बनाने के लिए GameServices::Builder का इस्तेमाल करें. GameServices ऑब्जेक्ट अपने-आप साइन इन करने की कोशिश करता है और OnAuthActionFinished() कॉलबैक की मदद से नतीजे दिखाता है. कॉलबैक से मिले नतीजे पर ध्यान दें. अगर अपने-आप साइन इन करने की कोशिश नाकाम हो जाती है, तो उपयोगकर्ताओं को साइन इन करने की अनुमति देने के लिए, एक बटन दिखाया जा सकता है.
  3. OnAuthActionFinished() नतीजा मिलने के बाद, Play की सेवाओं को कॉल करने के लिए, GameServices ऑब्जेक्ट और इसके चाइल्ड मैनेजर का इस्तेमाल किया जा सकता है, जिनमें ये शामिल हैं:

    • साइन इन करें (अनुमति न मिलने के बाद): StartAuthorizationUI()
    • उपलब्धियां अनलॉक करें: Achievements().Unlock()
    • पहले से मौजूद यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके उपलब्धियां दिखाएं: Achievements().ShowAllUI()
    • सबसे ज़्यादा स्कोर सबमिट करें: Leaderboards().SubmitScore()
    • साइन आउट करें: SignOut()
  4. GameServices ऑब्जेक्ट का इस्तेमाल करने के बाद, उसे रीसेट करें या नष्ट करें.

ज़्यादा जानकारी का लेवल:

  1. प्लैटफ़ॉर्म कॉन्फ़िगरेशन शुरू करें: यह एक ऐसा ऑब्जेक्ट है जिसमें प्लैटफ़ॉर्म के हिसाब से, शुरू करने की जानकारी शामिल होती है. Android पर, प्लैटफ़ॉर्म कॉन्फ़िगरेशन में Java VM और मौजूदा Activity के लिए एक पॉइंटर होता है:

    // In android_main(), create a platform configuration
    // and bind the object activity.
    // Alternately, attach the activity in JNI_Onload().
    gpg::AndroidPlatformConfiguration platform_configuration;
    platform_configuration.SetActivity(state->activity->clazz);
    
  2. GameServices ऑब्जेक्ट बनाएं: यह ऑब्जेक्ट, Google Play की गेम सेवाओं के फ़ंक्शन का मुख्य हिस्सा है. GameServices इंस्टेंस GameServices::Builder के साथ बनाए जाते हैं.

    ज़्यादातर प्रोसेस में, दिया गया GameServices ऑब्जेक्ट तब तक बना रहता है, जब तक आपका C एनवायरमेंट जारी रहता है. Android Activity के रुकने और फिर से शुरू होने पर, आपको इसे फिर से शुरू करने की ज़रूरत नहीं होती है.

    // Creates a GameServices object that has lambda callbacks.
    game_services_ = gpg::GameServices::Builder()
            .SetDefaultOnLog(gpg::LogLevel::VERBOSE)
            .SetOnAuthActionStarted([started_callback](gpg::AuthOperation op) {
                is_auth_in_progress_ = true;
                started_callback(op);
            })
            .SetOnAuthActionFinished([finished_callback](gpg::AuthOperation op,
                                                         gpg::AuthStatus status) {
                LOGI("Sign in finished with a result of %d", status);
                is_auth_in_progress_ = false;
                finished_callback(op, status);
            })
            .Create(pc);
    
  3. अपने GameServices ऑब्जेक्ट को मैनेज करने के लिए, मैनेजर क्लास का इस्तेमाल करें. मैनेजर को GameServices इंस्टेंस और ग्रुप से जुड़ी सुविधाओं से एक साथ ऐक्सेस किया जाता है. उदाहरण के लिए, उपलब्धि और लीडरबोर्ड मैनेजर. उनमें खुद को कोई उपयोगकर्ता नहीं देख सकते. मैनेजर, रेफ़रंस के ज़रिए वापस दिखाए जाते हैं और GameServices इंस्टेंस अपने लाइफ़साइकल को कंट्रोल करता है. आपके क्लाइंट को कभी भी मैनेजर संदर्भ में नहीं रहना चाहिए. इसके बजाय, आपके क्लाइंट को GameServices इंस्टेंस को होल्ड करना चाहिए.

    मैनेजर, नहीं बदले जा सकने वाले वैल्यू टाइप ऑब्जेक्ट के ज़रिए डेटा दिखाते हैं. ये वैल्यू उस समय के बुनियादी डेटा के एक जैसे व्यू दिखाती हैं जब क्वेरी की गई थी.

    // Submit a high score
    game_services_->Leaderboards().SubmitScore(leaderboard_id, score);
    
    // Show the default Achievements UI
    game_services_->Achievements().ShowAllUI();
    
  4. जब आप GameServices ऑब्जेक्ट का इस्तेमाल कर लें, तो reset() को unique_ptr के मालिकाना हक वाले unique_ptr पर कॉल करके या GameServices को अपने-आप तबाह होने दें, जब वे दायरे से बाहर हो जाएं.

थ्रेडिंग मॉडल

जब तक अलग से न बताया जाए, तब तक सभी GameServices और मैनेजर के तरीकों में, थ्रेड के लिए सुरक्षित और एसिंक्रोनस तरीके का इस्तेमाल होता है. उन्हें बाहरी थ्रेड को लॉक किए बिना किसी भी थ्रेड पर कॉल किया जा सकता है और वे अपने बोले जाने वाले क्रम के मुताबिक क्रम में काम करेंगे.

ऐक्सेसर मैथड (यानी लेख पढ़े जाने की स्थिति) दो मुख्य वैरिएंट में आते हैं. तरीके का पहला प्रकार (जैसे कि FetchProperty() जैसे नाम) दिए गए कॉलबैक को अपने नतीजों को एसिंक्रोनस रूप से देता है; दूसरा (FetchPropertyBlocking() जैसे नाम के साथ) सिंक करके अपने नतीजों को कॉल करने के थ्रेड में लौटाता है.

// Blocking callback
gpg::AchievementManager::FetchAllResponse fetchResponse =
        game_services_->Achievements().FetchAllBlocking(std::chrono::milliseconds(1000));

// Non-blocking callback
game_services_->Achievements().FetchAll(gpg::DataSource::CACHE_OR_NETWORK,
    [] (gpg::AchievementManager::FetchAllResponse response) {
    LogI("Achievement response status: %d", response.status);});

सभी उपयोगकर्ता कॉलबैक, एक खास कॉलबैक थ्रेड पर शुरू किए जाते हैं. यह थ्रेड, "मुख्य थ्रेड" या "यूज़र इंटरफ़ेस (यूआई) थ्रेड" के किसी भी प्लैटफ़ॉर्म कॉन्सेप्ट से अलग हो सकती है. आपको यह भी पक्का करना चाहिए कि उपयोगकर्ता के कॉलबैक तेज़ी से काम करें. रोके गए कॉलबैक थ्रेड की वजह से, उपयोगकर्ताओं को दिखने वाली समस्याएं (उदाहरण के लिए, साइन-आउट अनुरोध पूरा होने में देरी) हो सकती हैं.

प्लैटफ़ॉर्म के हिसाब से जानकारी

Android पर, Play Games C++ SDK टूल का इस्तेमाल शुरू करने के लिए, क्विकस्टार्ट गाइड पर जाएं.

इसके बारे में और पढ़ें

ज़्यादा जानकारी के लिए, Google Play की गेम सेवाओं के C++ SDK टूल में उपलब्ध, क्लास के दस्तावेज़ पढ़ना न भूलें. साथ ही, SDK टूल को इस्तेमाल करने का तरीका दिखाने वाले नमूने देखें.

अगर आपके गेम में बैकएंड सर्वर का इस्तेमाल होता है, तो Google Play की गेम सेवाओं के लिए सर्वर-साइड ऐक्सेस चालू करना देखें.