Google Play गेम सेवाएं C++ SDK, Google Play गेम सेवाओं के साथ उपयोग करने के लिए C++ API प्रदान करता है और यह उन डेवलपर के लिए है जिनके पास अपने गेम का मौजूदा C++ क्रियान्वयन है.
फ़िलहाल, SDK टूल इन सेवाओं को लागू करता है:
- अनुमति देना
- उपलब्धियां
- लीडरबोर्ड
- इवेंट
- सेव किए गए गेम
- Nearby कनेक्शन (सिर्फ़ Android पर)
- खिलाड़ी के आंकड़े
कॉन्सेप्ट
बड़े लेवल पर, SDK टूल का इस्तेमाल करने के लिए यह तरीका अपनाएं:
- Android के लिए प्लैटफ़ॉर्म कॉन्फ़िगरेशन सेट अप करें.
GameServices
ऑब्जेक्ट को कॉन्फ़िगर करने और बनाने के लिएGameServices::Builder
का इस्तेमाल करें.GameServices
ऑब्जेक्ट अपने-आप साइन इन करने की कोशिश करता है औरOnAuthActionFinished()
कॉलबैक की मदद से नतीजे दिखाता है. कॉलबैक से मिले नतीजे पर ध्यान दें. अगर अपने-आप साइन इन करने की कोशिश नाकाम हो जाती है, तो उपयोगकर्ताओं को साइन इन करने की अनुमति देने के लिए, एक बटन दिखाया जा सकता है.OnAuthActionFinished()
नतीजा मिलने के बाद, Play की सेवाओं को कॉल करने के लिए,GameServices
ऑब्जेक्ट और इसके चाइल्ड मैनेजर का इस्तेमाल किया जा सकता है, जिनमें ये शामिल हैं:- साइन इन करें (अनुमति न मिलने के बाद):
StartAuthorizationUI()
- उपलब्धियां अनलॉक करें:
Achievements().Unlock()
- पहले से मौजूद यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके उपलब्धियां दिखाएं:
Achievements().ShowAllUI()
- सबसे ज़्यादा स्कोर सबमिट करें:
Leaderboards().SubmitScore()
- साइन आउट करें:
SignOut()
- साइन इन करें (अनुमति न मिलने के बाद):
GameServices
ऑब्जेक्ट का इस्तेमाल करने के बाद, उसे रीसेट करें या नष्ट करें.
ज़्यादा जानकारी का लेवल:
प्लैटफ़ॉर्म कॉन्फ़िगरेशन शुरू करें: यह एक ऐसा ऑब्जेक्ट है जिसमें प्लैटफ़ॉर्म के हिसाब से, शुरू करने की जानकारी शामिल होती है. 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);
GameServices
ऑब्जेक्ट बनाएं: यह ऑब्जेक्ट, Google Play की गेम सेवाओं के फ़ंक्शन का मुख्य हिस्सा है.GameServices
इंस्टेंसGameServices::Builder
के साथ बनाए जाते हैं.ज़्यादातर प्रोसेस में, दिया गया
GameServices
ऑब्जेक्ट तब तक बना रहता है, जब तक आपका C एनवायरमेंट जारी रहता है. AndroidActivity
के रुकने और फिर से शुरू होने पर, आपको इसे फिर से शुरू करने की ज़रूरत नहीं होती है.// 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);
अपने
GameServices
ऑब्जेक्ट को मैनेज करने के लिए, मैनेजर क्लास का इस्तेमाल करें. मैनेजर कोGameServices
इंस्टेंस और ग्रुप से जुड़ी सुविधाओं से एक साथ ऐक्सेस किया जाता है. उदाहरण के लिए, उपलब्धि और लीडरबोर्ड मैनेजर. उनमें खुद को कोई उपयोगकर्ता नहीं देख सकते. मैनेजर, रेफ़रंस के ज़रिए वापस दिखाए जाते हैं औरGameServices
इंस्टेंस अपने लाइफ़साइकल को कंट्रोल करता है. आपके क्लाइंट को कभी भी मैनेजर संदर्भ में नहीं रहना चाहिए. इसके बजाय, आपके क्लाइंट कोGameServices
इंस्टेंस को होल्ड करना चाहिए.मैनेजर, नहीं बदले जा सकने वाले वैल्यू टाइप ऑब्जेक्ट के ज़रिए डेटा दिखाते हैं. ये वैल्यू उस समय के बुनियादी डेटा के एक जैसे व्यू दिखाती हैं जब क्वेरी की गई थी.
// Submit a high score game_services_->Leaderboards().SubmitScore(leaderboard_id, score); // Show the default Achievements UI game_services_->Achievements().ShowAllUI();
जब आप
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 की गेम सेवाओं के लिए सर्वर-साइड ऐक्सेस चालू करना देखें.