Google Sign-In API के बंद होने के बाद, हम 2026 में Games v1 एसडीके को हटा रहे हैं. फ़रवरी 2025 के बाद, Google Play पर ऐसे गेम पब्लिश नहीं किए जा सकेंगे जो Games v1 एसडीके के साथ अभी-अभी इंटिग्रेट किए गए हैं. हमारा सुझाव है कि आप इसके बजाय, Games v2 SDK का इस्तेमाल करें.
गेम के v1 इंटिग्रेशन वाले मौजूदा टाइटल, कुछ सालों तक काम करते रहेंगे. हालांकि, हमारा सुझाव है कि आप जून 2025 से v2 पर माइग्रेट करें.
यह गाइड, Play की गेम सेवाओं के v1 एसडीके का इस्तेमाल करने के लिए है. एसडीके के नए वर्शन के बारे में जानकारी पाने के लिए, v2 का दस्तावेज़ देखें.
अगर आपका गेम बैकएंड सर्वर का इस्तेमाल करता है, तो हमारा सुझाव है कि आप खिलाड़ियों की पुष्टि करने के लिए Google साइन-इन का इस्तेमाल करें. साथ ही, खिलाड़ी की पहचान को बैकएंड सर्वर पर सुरक्षित तरीके से भेजें. इससे आपका गेम, खिलाड़ी की पहचान और अन्य डेटा को सुरक्षित तरीके से वापस पा सकता है. साथ ही, डिवाइस से गुज़रते समय डेटा में संभावित छेड़छाड़ से भी बचा जा सकता है.
इस स्थिति में, आपका गेम खिलाड़ी को Google Play Games Services में हमेशा की तरह साइन इन करने के लिए कहता है. जब प्लेयर सफलतापूर्वक साइन इन कर लेता है, तो GoogleSignInAccount
ऑब्जेक्ट में एक खास कोड होता है. इसका इस्तेमाल सिर्फ़ एक बार किया जा सकता है. इसे सर्वर ऑथराइज़ेशन कोड कहा जाता है. क्लाइंट, इस कोड को सर्वर को भेजता है. इसके बाद, सर्वर पर, सर्वर ऑथराइज़ेशन कोड को OAuth 2.0 टोकन के लिए एक्सचेंज करें. सर्वर इस टोकन का इस्तेमाल, Google Play की गेम सेवाओं के एपीआई को कॉल करने के लिए कर सकता है.
अपने गेम में साइन-इन करने की सुविधा जोड़ने के बारे में ज़्यादा जानकारी के लिए, Android गेम में साइन-इन करने की सुविधा देखें.
खिलाड़ियों की पुष्टि करने के लिए, Google खाते से साइन इन करने की सुविधा का इस्तेमाल करने का तरीका दिखाने वाला कोड सैंपल देखने के लिए, GitHub पर clientserverskeleton
सैंपल देखें.
ऑफ़लाइन ऐक्सेस के लिए, यह तरीका अपनाएं:
- Google Play Console में: अपने गेम सर्वर के लिए क्रेडेंशियल बनाएं. क्रेडेंशियल का OAuth क्लाइंट टाइप "वेब" होगा.
- Android ऐप्लिकेशन में: साइन इन करने के दौरान, अपने सर्वर के क्रेडेंशियल के लिए सर्वर ऑथराइज़ेशन कोड का अनुरोध करें. इसके बाद, उसे अपने सर्वर को भेजें.
- अपने गेम सर्वर पर: Google की पुष्टि करने वाली सेवाओं का इस्तेमाल करके, सर्वर के ऑथराइज़ेशन कोड को OAuth ऐक्सेस टोकन के लिए बदलें. इसके बाद, इसका इस्तेमाल करके Play की गेम सेवाओं के REST API को कॉल करें.
शुरू करने से पहले
Google साइन-इन को अपने गेम में इंटिग्रेट करने से पहले, आपको अपने गेम को Google Play Console में जोड़ना होगा. इसके बारे में Google Play की गेम सेवाओं को सेट अप करना लेख में बताया गया है.
अपने गेम के लिए, सर्वर-साइड वेब ऐप्लिकेशन बनाना
Google Play Game services, वेब गेम के लिए बैक-एंड सहायता उपलब्ध नहीं कराती है. हालांकि, यह आपके Android गेम के सर्वर के लिए बैक-एंड सर्वर की सहायता उपलब्ध कराता है.
अगर आपको सर्वर-साइड ऐप्लिकेशन में, Google Play गेम सेवाओं के लिए REST API का इस्तेमाल करना है, तो यह तरीका अपनाएं:
- Google Play Console के लिंक किए गए ऐप्लिकेशन सेक्शन में जाकर, अपने गेम के लिए एक वेब ऐप्लिकेशन बनाएं. ध्यान दें कि इस फ़्लो के लिए
launch_url
का इस्तेमाल नहीं किया जाता. इसलिए, इसे खाली छोड़ा जा सकता है. - अपने ऐप्लिकेशन के लिए क्रेडेंशियल की जानकारी पाने के लिए, यह तरीका अपनाएं:
- Google Play Console में जाकर, अपने गेम पर क्लिक करें. इसके बाद, गेम की जानकारी पर क्लिक करें.
- नीचे की ओर स्क्रोल करके API Console प्रोजेक्ट सेक्शन पर जाएं. इसके बाद, API Console प्रोजेक्ट के लिंक पर क्लिक करें.
- Google API Console में एपीआई और सेवाएं > क्रेडेंशियल स्क्रीन पर जाकर, अपने वेब ऐप्लिकेशन के लिए
client_secret.json
फ़ाइल डाउनलोड करें. इसके बाद, इसे ऐसी जगह पर सेव करें जहां आपका सर्वर इसे ऐक्सेस कर सके. बाद में इस्तेमाल करने के लिए, क्रेडेंशियल का क्लाइंट आईडी रिकॉर्ड करें.
- अपने सर्वर साइड ऐप्लिकेशन को रीस्टार्ट करें, ताकि वह आपके गेम के क्लाइंट ऐप्लिकेशन से अनुरोध स्वीकार कर सके.
क्लाइंट पर साइन-इन करें
GoogleSignInClient
क्लास, फ़िलहाल साइन इन किए गए खिलाड़ी का खाता वापस पाने का मुख्य एंट्री पॉइंट है. साथ ही, यह उस खिलाड़ी को साइन इन करने की सुविधा देता है जिसने डिवाइस पर आपके ऐप्लिकेशन में पहले साइन इन नहीं किया है.
साइन-इन क्लाइंट बनाने के लिए, यह तरीका अपनाएं:
GoogleSignInOptions
ऑब्जेक्ट की मदद से, साइन-इन क्लाइंट बनाएं. साइन-इन को कॉन्फ़िगर करने के लिए, आपकोGoogleSignInOptions.Builder
मेंGoogleSignInOptions.DEFAULT_GAMES_SIGN_IN
की जानकारी देनी होगी.- आपको यह भी बताना होगा कि आपके गेम को बैकएंड सर्वर के लिए, पुष्टि करने वाले कोड की ज़रूरत है. इसके लिए,
GoogleSignInOptions.Builder.requestServerAuthCode()
तरीके को कॉल करें. इसमें सर्वर के क्लाइंट आईडी को पैरामीटर के तौर पर इस्तेमाल करें. आपको अपने बैकएंड सर्वर पर ऐक्सेस टोकन के लिए, ऑथराइज़ेशन कोड बाद में मिलेगा. इसके बारे में सर्वर ऑथराइज़ेशन कोड पाना लेख में बताया गया है. GoogleSignIn.getClient()
तरीके को कॉल करें और वे विकल्प पास करें जिन्हें आपने पहले कॉन्फ़िगर किया था. अगर कॉल पूरा हो जाता है, तो Google Sign-In API,GoogleSignInClient
का एक इंस्टेंस दिखाता है.GoogleSignInClient
इंस्टेंस मिलने के बाद, आपको खिलाड़ी को गतिविधि केonResume()
से चुपचाप साइन इन करना चाहिए. इसके बारे में चुपचाप साइन इन करने की प्रोसेस में बताया गया है.
यहां एक उदाहरण दिया गया है:
private static final int RC_SIGN_IN = 9001; private GoogleSignInClient mGoogleSignInClient; private void startSignInForAuthCode() { // Client ID for your backend server. String webClientId = getString(R.string.webclient_id); GoogleSignInOptions signInOption = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestServerAuthCode(webClientId) .build(); GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOption); Intent intent = signInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN); }
सर्वर ऑथराइज़ेशन कोड पाना
सर्वर के ऑथराइज़ेशन कोड को वापस पाने के लिए, getServerAuthCode()
ऑब्जेक्ट पर getServerAuthCode()
मेथड को कॉल करें. इस कोड का इस्तेमाल आपका गेम, बैकएंड सर्वर पर ऐक्सेस टोकन के लिए कर सकता है. यह ऑब्जेक्ट, खिलाड़ी के साइन इन करने पर Google Sign-In से मिलता है.GoogleSignInAccount
यहां एक उदाहरण दिया गया है:
// Auth code to send to backend server. private String mServerAuthCode; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { mServerAuthCode = result.getSignInAccount().getServerAuthCode(); } else { String message = result.getStatus().getStatusMessage(); if (message == null || message.isEmpty()) { message = getString(R.string.signin_other_error); } new AlertDialog.Builder(this).setMessage(message) .setNeutralButton(android.R.string.ok, null).show(); } } }
सर्वर पर, सर्वर ऑथराइज़ेशन कोड के बदले ऐक्सेस टोकन पाना
ऐक्सेस और रीफ़्रेश टोकन के बदले, सर्वर पर पुष्टि करने वाला कोड अपने बैकएंड सर्वर पर भेजें. खिलाड़ी की ओर से Google Play की गेम सेवाओं के API को कॉल करने के लिए, ऐक्सेस टोकन का इस्तेमाल करें. साथ ही, अगर चाहें, तो रीफ़्रेश टोकन को सेव करें, ताकि ऐक्सेस टोकन की समयसीमा खत्म होने पर नया ऐक्सेस टोकन हासिल किया जा सके.
नीचे दिए गए कोड स्निपेट में बताया गया है कि सर्वर के ऑथराइज़ेशन कोड को ऐक्सेस टोकन के लिए बदलने के लिए, Java प्रोग्रामिंग भाषा में सर्वर-साइड कोड को कैसे लागू किया जा सकता है. यह clientserverskeleton सैंपल ऐप्लिकेशन का इस्तेमाल कर रहा है:
/**
* Exchanges the authcode for an access token credential. The credential
* is the associated with the given player.
*
* @param authCode - the non-null authcode passed from the client.
* @param player - the player object which the given authcode is
* associated with.
* @return the HTTP response code indicating the outcome of the exchange.
*/
private int exchangeAuthCode(String authCode, Player player) {
try {
// The client_secret.json file is downloaded from the Google API
// console. This is used to identify your web application. The
// contents of this file should not be shared.
//
File secretFile = new File("client_secret.json");
// If we don't have the file, we can't access any APIs, so return
// an error.
if (!secretFile.exists()) {
log("Secret file : " + secretFile
.getAbsolutePath() + " does not exist!");
return HttpServletResponse.SC_FORBIDDEN;
}
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
JacksonFactory.getDefaultInstance(), new
FileReader(secretFile));
// Extract the application id of the game from the client id.
String applicationId = extractApplicationId(clientSecrets
.getDetails().getClientId());
GoogleTokenResponse tokenResponse =
new GoogleAuthorizationCodeTokenRequest(
HTTPTransport,
JacksonFactory.getDefaultInstance(),
"https://oauth2.googleapis.com/token",
clientSecrets.getDetails().getClientId(),
clientSecrets.getDetails().getClientSecret(),
authCode,
"")
.execute();
log("hasRefresh == " + (tokenResponse.getRefreshToken() != null));
log("Exchanging authCode: " + authCode + " for token");
Credential credential = new Credential
.Builder(BearerToken.authorizationHeaderAccessMethod())
.setJsonFactory(JacksonFactory.getDefaultInstance())
.setTransport(HTTPTransport)
.setTokenServerEncodedUrl("https://www.googleapis.com/oauth2/v4/token")
.setClientAuthentication(new HttpExecuteInterceptor() {
@Override
public void intercept(HttpRequest request)
throws IOException {
}
})
.build()
.setFromTokenResponse(tokenResponse);
player.setCredential(credential);
// Now that we have a credential, we can access the Games API.
PlayGamesAPI api = new PlayGamesAPI(player, applicationId,
HTTPTransport, JacksonFactory.getDefaultInstance());
// Call the verify method, which checks that the access token has
// access to the Games API, and that the player id used by the
// client matches the playerId associated with the accessToken.
boolean ok = api.verifyPlayer();
// Call a Games API on the server.
if (ok) {
ok = api.updatePlayerInfo();
if (ok) {
// persist the player.
savePlayer(api.getPlayer());
}
}
return ok ? HttpServletResponse.SC_OK :
HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
} catch (IOException e) {
e.printStackTrace();
}
return HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
}
साइन इन किए हुए किसी खिलाड़ी की ओर से, बैकएंड सर्वर से Google API ऐक्सेस करने के बारे में ज़्यादा जानने के लिए, सर्वर-साइड ऐक्सेस चालू करना लेख पढ़ें.
खिलाड़ी के साइन आउट करने की प्रोसेस मैनेज करना
खिलाड़ियों को अपने गेम से साइन आउट करने के लिए, GoogleSignInClient
पर signOut()
तरीके को कॉल करें. कोड स्निपेट के उदाहरण के लिए, खिलाड़ी को साइन आउट करना देखें.
सर्वर से REST API को कॉल करना
उपलब्ध एपीआई कॉल के बारे में पूरी जानकारी पाने के लिए, Google Play Games services के लिए REST API पर जाएं.
REST API कॉल के कुछ उदाहरण यहां दिए गए हैं, जो आपके काम आ सकते हैं:
खिलाड़ी
- क्या आपको साइन इन किए गए प्लेयर का आईडी और प्रोफ़ाइल डेटा चाहिए? आईडी के तौर पर
'me'
का इस्तेमाल करके, Players.get को कॉल करें.
दोस्त
पक्का करें कि आपने Friends गाइड पढ़ ली हो. इसमें Friends के बारे में ज़्यादा जानकारी दी गई है.
- क्या आपको प्लेयर के दोस्तों की सूची वापस लानी है?
collection
के तौर पर'friends_all'
का इस्तेमाल करके, Players.list को कॉल करें. - देखें कि आपके पास दोस्तों की सूची का ऐक्सेस है या नहीं?
me
के लिए Players.get को कॉल करें. साथ ही, जवाब मेंprofileSettings.friendsListVisibility
फ़ील्ड देखें.
उपलब्धियां
उपलब्धियां वाली गाइड ज़रूर देखें. इसमें उपलब्धियों के बारे में ज़्यादा जानकारी दी गई है.
- क्या आपको मौजूदा उपलब्धियों की सूची चाहिए? AchievementDefinitions.list को कॉल किया जा सकता है.
- इसके बाद, Achievements.list को कॉल करके पता लगाएं कि खिलाड़ी ने कौनसी उपलब्धियां अनलॉक की हैं.
- क्या खिलाड़ी ने कोई उपलब्धि हासिल की? इसे अनलॉक करने के लिए, Achievements.unlock का इस्तेमाल करें!
- क्या खिलाड़ी ने किसी उपलब्धि को आंशिक रूप से पूरा किया है? प्रोग्रेस की जानकारी देने के लिए, Achievements.increment का इस्तेमाल करें. इससे यह भी पता चलेगा कि खिलाड़ी ने उपलब्धि अनलॉक की है या नहीं.
- क्या आपको ऐसे गेम को डीबग करना है जो अभी प्रोडक्शन में नहीं है? उपलब्धियों को उनकी मूल स्थिति पर रीसेट करने के लिए, Management API से Achievements.reset या Achievements.resetAll को कॉल करें.
लीडरबोर्ड
लीडरबोर्ड गाइड को ज़रूर पढ़ें. इसमें लीडरबोर्ड के बारे में ज़्यादा जानकारी दी गई है.
- क्या आपको गेम में मौजूद सभी स्कोरबोर्ड की सूची चाहिए? Leaderboards.list को कॉल करें.
- क्या प्लेयर ने गेम खेलना बंद कर दिया है? Scores.submit को उनका स्कोर सबमिट किया जा सकता है. इससे यह पता लगाया जा सकता है कि यह नया हाई स्कोर है या नहीं.
- क्या आपको लीडरबोर्ड दिखाना है? Scores.list से डेटा पाएं और उसे उपयोगकर्ता को दिखाएं.
- उपयोगकर्ता के सबसे ज़्यादा स्कोर के आस-पास के स्कोर ढूंढने के लिए, Scores.listWindow का इस्तेमाल करें.
- किसी लीडरबोर्ड में खिलाड़ी के स्कोर के बारे में ज़्यादा जानकारी पाने के लिए, Scores.get को कॉल करें. उदाहरण के लिए, अगर खिलाड़ी सभी खिलाड़ियों में से टॉप 12% में शामिल है.
- क्या आपको किसी गेम को डीबग करना है? किसी लीडरबोर्ड से उस खिलाड़ी के सभी स्कोर रीसेट करने के लिए, Management API से Scores.reset को कॉल करें