C++ के लिए Play Games की सेवाएं

Google Play Games Services C++ SDK टूल, Google Play की गेम सेवाओं के साथ इस्तेमाल करने के लिए C++ एपीआई उपलब्ध कराता है. यह टूल उन डेवलपर के लिए है जिनके गेम में पहले से ही C++ लागू है.

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

  • प्राधिकरण
  • उपलब्धियां
  • लीडरबोर्ड
  • इवेंट
  • सेव किए गए गेम
  • आस-पास मौजूद डिवाइसों से कनेक्ट करने की सुविधा (सिर्फ़ Android के लिए)
  • खिलाड़ी के आंकड़े

कॉन्सेप्ट

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

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

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

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

  1. प्लैटफ़ॉर्म कॉन्फ़िगरेशन को शुरू करना: यह एक ऑब्जेक्ट है, जिसमें प्लैटफ़ॉर्म के हिसाब से शुरू करने की जानकारी होती है. Android पर, प्लैटफ़ॉर्म कॉन्फ़िगरेशन में Java वीएम और मौजूदा 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 ऑब्जेक्ट का इस्तेमाल करने के बाद, उसे हटाने के लिए, unique_ptr पर reset() को कॉल करें. unique_ptr के पास ऑब्जेक्ट का मालिकाना हक होता है. इसके अलावा, unique_ptr के दायरे से बाहर जाने पर, ऑब्जेक्ट अपने-आप मिट जाता है.

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

जब तक अलग से जानकारी नहीं दी जाती, तब तक सभी 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 की गेम सेवाओं के लिए, सर्वर साइड ऐक्सेस की सुविधा चालू करना लेख पढ़ें.