Google Sign-In API के बंद होने के बाद, हम 2026 में Games v1 SDK को हटा रहे हैं. फ़रवरी 2025 के बाद, Google Play पर ऐसे गेम पब्लिश नहीं किए जा सकेंगे जिन्हें हाल ही में Games v1 SDK के साथ इंटिग्रेट किया गया है. हमारा सुझाव है कि आप इसके बजाय, Games v2 SDK का इस्तेमाल करें.
हालांकि, Games v1 के साथ इंटिग्रेट किए गए मौजूदा टाइटल, कुछ सालों तक काम करते रहेंगे, लेकिन हमारा सुझाव है कि आप जून 2025 से v2 पर माइग्रेट कर लें.
यह गाइड, Play की गेम सेवाओं के v1 SDK का इस्तेमाल करने के लिए है. एसडीके के नए वर्शन के बारे में जानकारी पाने के लिए, वर्शन 2 का दस्तावेज़ देखें.
अगर आपका गेम बैकएंड सर्वर का इस्तेमाल करता है, तो हमारा सुझाव है कि आप खिलाड़ियों की पुष्टि करने के लिए Google Sign-In का इस्तेमाल करें. साथ ही, खिलाड़ी की पहचान को बैकएंड सर्वर पर सुरक्षित तरीके से भेजें. इससे आपका गेम, खिलाड़ी की पहचान और अन्य डेटा को सुरक्षित तरीके से वापस पा सकता है और डिवाइस से होकर जाते समय डेटा के साथ छेड़छाड़ का जोखिम कम होता है.
इस स्थिति में आपका गेम, खिलाड़ी को Google Play की गेम सेवाओं में हमेशा की तरह साइन इन करने के लिए कहता है. जब खिलाड़ी सफलतापूर्वक साइन इन कर लेता है, तो GoogleSignInAccount ऑब्जेक्ट में एक खास कोड होता है जिसका इस्तेमाल सिर्फ़ एक बार किया जा सकता है. इसे सर्वर ऑथराइज़ेशन कोड कहा जाता है. क्लाइंट, इस कोड को सर्वर को भेजता है. इसके बाद सर्वर पर, सर्वर ऑथराइज़ेशन कोड को OAuth 2.0 टोकन के लिए एक्सचेंज करें. सर्वर इस टोकन का इस्तेमाल, Google Play की गेम सेवाओं के एपीआई को कॉल करने के लिए कर सकता है.
अपने गेम में साइन-इन करने की सुविधा जोड़ने के बारे में ज़्यादा जानकारी के लिए, Android गेम में साइन-इन करने की सुविधा देखें.
Google Sign-In का इस्तेमाल करके खिलाड़ियों की पुष्टि करने का तरीका दिखाने वाला कोड सैंपल देखने के लिए, GitHub पर मौजूद clientserverskeleton सैंपल देखें.
ऑफ़लाइन ऐक्सेस के लिए, यह तरीका अपनाएं:
- Google Play Console में: अपने गेम सर्वर के लिए क्रेडेंशियल बनाएं. क्रेडेंशियल का OAuth क्लाइंट टाइप "वेब" होगा.
- Android ऐप्लिकेशन में: साइन इन करने के दौरान, अपने सर्वर के क्रेडेंशियल के लिए सर्वर ऑथराइज़ेशन कोड का अनुरोध करें. इसके बाद, उसे अपने सर्वर को भेजें.
- अपने गेम सर्वर पर: Google की पुष्टि करने वाली सेवाओं का इस्तेमाल करके, सर्वर के ऑथराइज़ेशन कोड को OAuth ऐक्सेस टोकन के लिए बदलें. इसके बाद, इस टोकन का इस्तेमाल Play की गेम सेवाओं के REST API को कॉल करने के लिए करें.
शुरू करने से पहले
Google Sign-In को अपने गेम में इंटिग्रेट करने से पहले, गेम को Google Play Console में जोड़ना होगा. इसके बारे में Google Play की गेम सेवाओं को सेट अप करना लेख में बताया गया है.
अपने गेम के लिए, एक सर्वर-साइड वेब ऐप्लिकेशन बनाना
Google Play की गेम सेवाएं, वेब गेम के लिए बैक-एंड सहायता नहीं देती हैं. हालांकि, यह आपके 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);
}सर्वर ऑथराइज़ेशन कोड पाना
सर्वर ऑथराइज़ेशन कोड को वापस पाने के लिए, GoogleSignInAccount
ऑब्जेक्ट पर getServerAuthCode()
तरीके को कॉल करें. आपका गेम इस कोड का इस्तेमाल, बैकएंड सर्वर पर ऐक्सेस टोकन के लिए कर सकता है. यह ऑब्जेक्ट, खिलाड़ी के सफलतापूर्वक साइन इन करने पर Google Sign-In से मिलता है.
यहां एक उदाहरण दिया गया है:
// 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 की गेम सेवाओं के एपीआई को कॉल करने के लिए, ऐक्सेस टोकन का इस्तेमाल करें. साथ ही, अगर चाहें, तो रीफ़्रेश टोकन को सेव करें, ताकि ऐक्सेस टोकन की समयसीमा खत्म होने पर नया ऐक्सेस टोकन हासिल किया जा सके.
नीचे दिए गए कोड स्निपेट में बताया गया है कि सर्वर ऑथराइज़ेशन कोड को ऐक्सेस टोकन में बदलने के लिए, 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 की गेम सेवाओं के लिए 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 को कॉल करें