Google Sign-In API के बंद होने के बाद, हम 2026 में Games v1 एसडीके को हटा रहे हैं. फ़रवरी 2025 के बाद, Google Play पर ऐसे गेम पब्लिश नहीं किए जा सकेंगे जो Games v1 एसडीके के साथ अभी-अभी इंटिग्रेट किए गए हैं. हमारा सुझाव है कि आप इसके बजाय, Games v2 SDK का इस्तेमाल करें.
गेम के v1 इंटिग्रेशन वाले मौजूदा टाइटल, कुछ सालों तक काम करते रहेंगे. हालांकि, हमारा सुझाव है कि आप जून 2025 से v2 पर माइग्रेट करें.
यह गाइड, Play की गेम सेवाओं के v1 एसडीके का इस्तेमाल करने के लिए है. Play की गेम सेवाओं v2 के लिए C++ SDK टूल अभी उपलब्ध नहीं है.
Google Play की गेम सेवाओं का C++ SDK टूल, Google Play की गेम सेवाओं के साथ इस्तेमाल करने के लिए C++ API उपलब्ध कराता है. यह उन डेवलपर के लिए है जिन्होंने अपने गेम में C++ को पहले से लागू किया हुआ है.
फ़िलहाल, SDK टूल इन सेवाओं को लागू करता है:
- प्राधिकरण
- उपलब्धियां
- लीडरबोर्ड
- इवेंट
- सेव किए गए गेम
- Nearby Connections (सिर्फ़ Android पर)
- खिलाड़ी के आंकड़े
कॉन्सेप्ट
एसडीके का इस्तेमाल करने के लिए, यह तरीका अपनाएं:
- Android के लिए प्लैटफ़ॉर्म कॉन्फ़िगरेशन सेट अप करें.
GameServicesऑब्जेक्ट को कॉन्फ़िगर और बनाने के लिए,GameServices::Builderका इस्तेमाल करें.GameServicesऑब्जेक्ट, अपने-आप साइन इन करने की कोशिश करता है. साथ ही,OnAuthActionFinished()कॉलबैक के ज़रिए नतीजा दिखाता है. कॉलबैक से मिले नतीजे पर ध्यान दें. अगर अपने-आप साइन इन होने की सुविधा काम नहीं करती है, तो उपयोगकर्ताओं को साइन इन करने के लिए बटन दिखाया जा सकता है.OnAuthActionFinished()नतीजे मिलने के बाद, Play Games services के कॉल करने के लिए,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ऑब्जेक्ट का इस्तेमाल पूरा होने के बाद, इसे साफ़ करें. इसके लिए,unique_ptrके मालिक परreset()को कॉल करें या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 टूल के साथ आने वाला क्लास दस्तावेज़ ज़रूर पढ़ें. साथ ही, एसडीके इस्तेमाल करने का तरीका बताने वाले नमूने देखें.
अगर आपका गेम बैकएंड सर्वर का इस्तेमाल करता है, तो Google Play की गेम सेवाओं के लिए, सर्वर-साइड ऐक्सेस चालू करना लेख पढ़ें.