Google Sign-In API के बंद होने के बाद, हम 2026 में Games v1 एसडीके को हटा रहे हैं. फ़रवरी 2025 के बाद, Google Play पर ऐसे गेम पब्लिश नहीं किए जा सकेंगे जो Games v1 एसडीके के साथ अभी-अभी इंटिग्रेट किए गए हैं. हमारा सुझाव है कि आप इसके बजाय, Games v2 SDK का इस्तेमाल करें.
गेम के v1 इंटिग्रेशन वाले मौजूदा टाइटल, कुछ सालों तक काम करते रहेंगे. हालांकि, हमारा सुझाव है कि आप जून 2025 से v2 पर माइग्रेट करें.
यह गाइड, Play की गेम सेवाओं के v1 एसडीके का इस्तेमाल करने के लिए है. एसडीके के नए वर्शन के बारे में जानकारी पाने के लिए, v2 का दस्तावेज़ देखें.
Google Play Games Services की सुविधाओं को ऐक्सेस करने के लिए, आपके गेम को साइन इन किए गए खिलाड़ी का खाता देना होगा. अगर खिलाड़ी की पुष्टि नहीं हुई है, तो Google Play की गेम सेवाओं के एपीआई को कॉल करते समय, आपके गेम में गड़बड़ियां हो सकती हैं. इस दस्तावेज़ में, आपके गेम में बिना किसी रुकावट के साइन-इन करने की सुविधा को लागू करने का तरीका बताया गया है.
खिलाड़ी के साइन-इन करने की सुविधा लागू करना
GoogleSignInClient
क्लास, फ़िलहाल साइन इन किए गए खिलाड़ी का खाता वापस पाने का मुख्य एंट्री पॉइंट है. साथ ही, यह उस खिलाड़ी को साइन इन करने की सुविधा देता है जिसने डिवाइस पर आपके ऐप्लिकेशन में पहले साइन इन नहीं किया है.
साइन-इन क्लाइंट बनाने के लिए, यह तरीका अपनाएं:
GoogleSignInOptions
ऑब्जेक्ट का इस्तेमाल करके, साइन-इन क्लाइंट बनाएं. इसके लिए, यहां दिए गए कोड स्निपेट का इस्तेमाल करें. साइन-इन को कॉन्फ़िगर करने के लिए, आपकोGoogleSignInOptions.Builder
मेंGoogleSignInOptions.DEFAULT_GAMES_SIGN_IN
की जानकारी देनी होगी.GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
अगर आपको
SnapshotsClient
का इस्तेमाल करना है, तो अपनेGoogleSignInOptions.Builder
में.requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
जोड़ें. इसके लिए, यहां दिया गया कोड स्निपेट देखें:GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS) .build();
GoogleSignIn.getClient()
तरीके को कॉल करें और पिछले चरणों में कॉन्फ़िगर किए गए विकल्प पास करें. अगर कॉल सफल होता है, तो Google Sign-In API,GoogleSignInClient
का एक इंस्टेंस दिखाता है.
देखें कि प्लेयर ने पहले से ही साइन इन किया हुआ है या नहीं
GoogleSignIn.getLastSignedInAccount()
का इस्तेमाल करके, यह देखा जा सकता है कि मौजूदा डिवाइस पर किसी खाते में पहले से साइन इन किया गया है या नहीं. साथ ही, GoogleSignIn.hasPermissions()
का इस्तेमाल करके, यह देखा जा सकता है कि इस खाते को ज़रूरी अनुमतियां पहले से मिली हुई हैं या नहीं.
अगर दोनों शर्तें पूरी होती हैं, यानी कि getLastSignedInAccount()
से कोई गैर-शून्य वैल्यू मिलती है और hasPermissions()
से true
मिलता है, तो getLastSignedInAccount()
से मिले खाते का इस्तेमाल सुरक्षित तरीके से किया जा सकता है. भले ही, डिवाइस ऑफ़लाइन हो.
साइलेंट साइन-इन करना
फ़िलहाल, साइन इन किए हुए प्लेयर का खाता वापस पाने के लिए, silentSignIn()
को कॉल किया जा सकता है.
साथ ही, अगर प्लेयर ने किसी दूसरे डिवाइस पर आपके ऐप्लिकेशन में सफलतापूर्वक साइन इन किया है, तो उन्हें बिना किसी यूज़र इंटरफ़ेस (यूआई) के साइन इन करने का विकल्प दिया जा सकता है.
silentSignIn()
वाला तरीका, Task<GoogleSignInAccount>
दिखाता है. टास्क पूरा होने पर, आपको GoogleSignInAccount
फ़ील्ड को उस साइन-इन खाते पर सेट करना होगा जिसे टास्क, नतीजे के तौर पर दिखाता है. इसके अलावा, इसे null
पर भी सेट किया जा सकता है. इससे पता चलता है कि कोई उपयोगकर्ता साइन इन नहीं है.
अगर साइलेंट साइन-इन की कोशिश पूरी नहीं होती है, तो आपके पास साइन-इन इंटेंट भेजने का विकल्प होता है. इससे साइन-इन करने के लिए उपयोगकर्ता इंटरफ़ेस दिखता है. इसके बारे में इंटरैक्टिव साइन-इन करना लेख में बताया गया है.
जब गतिविधि फ़ोरग्राउंड में नहीं होती है, तब साइन इन किए गए प्लेयर की स्थिति बदल सकती है. इसलिए, हम गतिविधि के onResume()
तरीके से silentSignIn()
को कॉल करने का सुझाव देते हैं.
बिना किसी सूचना के साइन-इन करने के लिए, यह तरीका अपनाएं:
- साइलेंट साइन-इन फ़्लो शुरू करने के लिए,
GoogleSignInClient
परsilentSignIn()
तरीके को कॉल करें. यह कॉल,Task<GoogleSignInAccount>
ऑब्जेक्ट दिखाता है. अगर साइलेंट साइन-इन की प्रोसेस पूरी हो जाती है, तो इसमेंGoogleSignInAccount
शामिल होता है. OnCompleteListener
को बदलकर, प्लेयर के साइन-इन होने या न होने की स्थिति को मैनेज करें.- अगर साइन-इन करने का टास्क पूरा हो गया है, तो
getResult()
को कॉल करकेGoogleSignInAccount
ऑब्जेक्ट पाएं. - अगर साइन इन नहीं हो सका, तो इंटरैक्टिव साइन इन फ़्लो लॉन्च करने के लिए, साइन इन करने का इंटेंट भेजा जा सकता है.
इस्तेमाल किए जा सकने वाले अन्य कॉल बैक लिसनर की सूची देखने के लिए, Tasks API डेवलपर गाइड और
Task
एपीआई रेफ़रंस देखें.
- अगर साइन-इन करने का टास्क पूरा हो गया है, तो
नीचे दिए गए कोड स्निपेट में बताया गया है कि आपका ऐप्लिकेशन, साइलेंट साइन-इन कैसे कर सकता है:
private void signInSilently() { GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN; GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) { // Already signed in. // The signed in account is stored in the 'account' variable. GoogleSignInAccount signedInAccount = account; } else { // Haven't been signed-in before. Try the silent sign-in first. GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions); signInClient .silentSignIn() .addOnCompleteListener( this, new OnCompleteListener<GoogleSignInAccount>() { @Override public void onComplete(@NonNull Task<GoogleSignInAccount> task) { if (task.isSuccessful()) { // The signed in account is stored in the task's result. GoogleSignInAccount signedInAccount = task.getResult(); } else { // Player will need to sign-in explicitly using via UI. // See [sign-in best practices](http://developers.google.com/games/services/checklist) for guidance on how and when to implement Interactive Sign-in, // and [Performing Interactive Sign-in](http://developers.google.com/games/services/android/signin#performing_interactive_sign-in) for details on how to implement // Interactive Sign-in. } } }); } } @Override protected void onResume() { super.onResume(); signInSilently(); }
अगर साइलेंट साइन-इन की कोशिश पूरी नहीं होती है, तो स्टेटस कोड की पूरी जानकारी पाने के लिए, getException()
को कॉल करें और ApiException
पाएं. CommonStatusCodes.SIGN_IN_REQUIRED
स्टेटस कोड से पता चलता है कि खिलाड़ी को साइन-इन करने के लिए साफ़ तौर पर कार्रवाई करनी होगी. इस मामले में, आपके ऐप्लिकेशन को इंटरैक्टिव साइन-इन फ़्लो लॉन्च करना चाहिए. इसके बारे में अगले सेक्शन में बताया गया है.
इंटरैक्टिव साइन-इन करना
प्लेयर इंटरैक्शन की मदद से साइन इन करने के लिए, आपके ऐप्लिकेशन को साइन-इन इंटेंट लॉन्च करना होगा. अगर यह प्रोसेस पूरी हो जाती है, तो Google Sign-In API एक ऐसा यूज़र इंटरफ़ेस दिखाता है जिसमें खिलाड़ी को साइन इन करने के लिए, अपने क्रेडेंशियल डालने के लिए कहा जाता है. इस तरीके से, ऐप्लिकेशन को आसानी से डेवलप किया जा सकता है. ऐसा इसलिए, क्योंकि साइन-इन करने की गतिविधि, Google Play services को अपडेट करने या सहमति के लिए प्रॉम्प्ट दिखाने जैसे मामलों को आपके ऐप्लिकेशन की ओर से हैंडल करती है. नतीजा, onActivityResult
कॉलबैक के ज़रिए मिलता है.
इंटरैक्टिव तरीके से साइन-इन करने के लिए, यह तरीका अपनाएं:
साइन-इन करने का इरादा जानने के लिए,
GoogleSignInClient
परgetSigninIntent()
को कॉल करें. इसके बाद,startActivity()
को कॉल करें और उसमें वह इरादा पास करें. यहां दिए गए कोड स्निपेट में बताया गया है कि आपका ऐप्लिकेशन, इंटरैक्टिव साइन-इन फ़्लो को कैसे लॉन्च कर सकता है:private void startSignInIntent() { GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN); Intent intent = signInClient.getSignInIntent(); startActivityForResult(intent, RC_SIGN_IN); }
onActivityResult()
कॉलबैक में, दिखाए गए इंटेंट से मिले नतीजे को हैंडल करें.- अगर साइन-इन हो जाता है, तो
GoogleSignInResult
सेGoogleSignInAccount
ऑब्जेक्ट पाएं. - अगर साइन-इन नहीं हो पाता है, तो आपको साइन-इन से जुड़ी गड़बड़ी को ठीक करना चाहिए. उदाहरण के लिए, सूचना में गड़बड़ी का मैसेज दिखाकर. नीचे दिया गया कोड स्निपेट दिखाता है कि आपका ऐप्लिकेशन, खिलाड़ी के साइन-इन के नतीजों को कैसे मैनेज कर सकता है:
@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()) { // The signed in account is stored in the result. GoogleSignInAccount signedInAccount = result.getSignInAccount(); } 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 Sign-In API से मिले GoogleSignInAccount
में, खिलाड़ी की कोई जानकारी शामिल नहीं होती. अगर आपका गेम, खिलाड़ी की जानकारी का इस्तेमाल करता है, जैसे कि खिलाड़ी का डिसप्ले नेम और प्लेयर आईडी, तो इस जानकारी को वापस पाने के लिए यह तरीका अपनाएं.
getPlayersClient()
तरीके को कॉल करके,PlayersClient
ऑब्जेक्ट पाएं. साथ ही,GoogleSignInAccount
को पैरामीटर के तौर पर पास करें.Player
ऑब्जेक्ट को एसिंक्रोनस तरीके से लोड करने के लिए,PlayersClient
तरीकों का इस्तेमाल करें. इस ऑब्जेक्ट में प्लेयर की जानकारी होती है. उदाहरण के लिए, फ़िलहाल साइन इन किए गए प्लेयर को लोड करने के लिए,getCurrentPlayer()
को कॉल किया जा सकता है. अगर टास्क,SIGN_IN_REQUIRED
स्टेटस कोड के साथApiException
दिखाता है, तो इसका मतलब है कि खिलाड़ी को फिर से पुष्टि करनी होगी. इसके लिए, प्लेयर में इंटरैक्टिव तरीके से साइन इन करने के लिए,GoogleSignInClient.getSignInIntent()
को कॉल करें.- अगर टास्क
Player
ऑब्जेक्ट को दिखाता है, तोPlayer
ऑब्जेक्ट के तरीकों को कॉल करके, किसी खिलाड़ी की जानकारी (जैसे किgetDisplayName()
याgetPlayerId()
) को वापस पाया जा सकता है.
साइन इन करने का बटन उपलब्ध कराना
अपने गेम में Google से साइन इन करने का स्टैंडर्ड बटन जोड़ने के लिए, इनमें से कोई एक तरीका इस्तेमाल किया जा सकता है:
- मुख्य गतिविधि के लेआउट में
com.google.android.gms.common.SignInButton
शामिल करें या - Google Sign-In की ब्रैंडिंग के दिशा-निर्देशों के मुताबिक, साइन-इन करने के लिए कस्टम बटन डिज़ाइन करें.
जब उपयोगकर्ता साइन इन बटन पर क्लिक करते हैं, तो आपके गेम को साइन इन फ़्लो शुरू करना चाहिए. इसके लिए, उसे साइन इन इंटेंट भेजना होगा. इसके बारे में इंटरैक्टिव साइन-इन करना लेख में बताया गया है.
इस कोड स्निपेट में, आपकी गतिविधि के लिए onCreate()
तरीके से साइन-इन बटन जोड़ने का तरीका बताया गया है.
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sign_in); findViewById(R.id.sign_in_button).setOnClickListener(this); findViewById(R.id.sign_out_button).setOnClickListener(this); }
नीचे दिए गए कोड स्निपेट में बताया गया है कि जब उपयोगकर्ता साइन-इन बटन पर क्लिक करता है, तो साइन-इन का इरादा कैसे भेजा जा सकता है.
@Override public void onClick(View view) { if (view.getId() == R.id.sign_in_button) { // start the asynchronous sign in flow startSignInIntent(); } else if (view.getId() == R.id.sign_out_button) { // sign out. signOut(); // show sign-in button, hide the sign-out button findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); findViewById(R.id.sign_out_button).setVisibility(View.GONE); } }
गेम के पॉप-अप दिखाना
GamesClient
क्लास का इस्तेमाल करके, अपने गेम में पॉप-अप व्यू दिखाए जा सकते हैं. उदाहरण के लिए, आपका गेम “वापस आएं” या “उपलब्धियां अनलॉक की गईं” पॉप-अप दिखा सकता है. Google Play की गेम सेवाओं को अपने गेम में व्यू के तौर पर पॉप-अप लॉन्च करने की अनुमति देने के लिए, setViewForPopups()
तरीके का इस्तेमाल करें. setGravityForPopups()
को कॉल करके, यह तय किया जा सकता है कि पॉप-अप स्क्रीन पर कहां दिखेगा.
प्लेयर को साइन आउट करना
साइन आउट करने के लिए, GoogleSignInClient
पर signOut()
तरीके को कॉल किया जाता है.
private void signOut() { GoogleSignInClient signInClient = GoogleSignIn.getClient(this, GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN); signInClient.signOut().addOnCompleteListener(this, new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { // at this point, the user is signed out. } }); }