Google Play की गेम सेवाओं की सुविधाओं को ऐक्सेस करने के लिए, आपके गेम में, साइन इन किए हुए प्लेयर का खाता उपलब्ध कराना होगा. अगर खिलाड़ी की पुष्टि नहीं की गई है, तो Google Play की गेम सेवाओं के एपीआई पर कॉल करते समय आपके गेम में गड़बड़ियां आ सकती हैं. इस दस्तावेज़ में आपके गेम में आसान साइन-इन अनुभव लागू करने का तरीका बताया गया है.
प्लेयर में साइन इन करने की सुविधा लागू की जा रही है
GoogleSignInClient
क्लास, साइन इन करने वाले मौजूदा प्लेयर का खाता वापस पाने और प्लेयर में साइन इन करने के लिए एक मुख्य एंट्री पॉइंट है. हालांकि, यह ज़रूरी है कि प्लेयर में उपयोगकर्ता ने पहले आपके ऐप्लिकेशन पर ऐसा न किया हो.
साइन इन क्लाइंट बनाने के लिए, यह तरीका अपनाएं:
नीचे दिए गए कोड स्निपेट में दिखाए गए
GoogleSignInOptions
ऑब्जेक्ट के ज़रिए, साइन इन क्लाइंट बनाएं. अपने साइन इन को कॉन्फ़िगर करने के लिए,GoogleSignInOptions.Builder
में,GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN
के बारे में बताएं.GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
अगर आपको
SnapshotsClient
का इस्तेमाल करना है, तो.requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
को अपनेGoogleSignInOptions.Builder
में जोड़ें, जैसा कि इस कोड स्निपेट में दिखाया गया है:GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN) .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS) .build();
GoogleSignIn.getClient()
वाले तरीके पर कॉल करें और उन विकल्पों को पास करें जिन्हें आपने पिछले चरणों में कॉन्फ़िगर किया था. अगर कॉल सफल रहा, तो 'Google साइन-इन एपीआई'GoogleSignInClient
का एक इंस्टेंस दिखाता है.
यह देखना कि उपयोगकर्ता ने पहले से साइन इन किया हुआ है या नहीं
GoogleSignIn.getLastSignedInAccount()
का इस्तेमाल करके, यह देखा जा सकता है कि मौजूदा डिवाइस पर कोई खाता, पहले से साइन इन है या नहीं. साथ ही, यह भी देखा जा सकता है कि GoogleSignIn.hasPermissions()
की मदद से, इस खाते को पहले से ही ज़रूरी अनुमतियां मिली हैं या नहीं.
अगर दोनों शर्तें सही हैं—यानी, getLastSignedInAccount()
बिना वैल्यू वाली वैल्यू दिखाता है और hasPermissions()
true
वैल्यू दिखाता है, तो getLastSignedInAccount()
से मिले खाते को सुरक्षित तरीके से इस्तेमाल किया जा सकता है, भले ही
डिवाइस ऑफ़लाइन हो.
बिना आवाज़ के साइन इन करें
आपने जिस प्लेयर में साइन इन किया है उसका खाता वापस पाने के लिए, silentSignIn()
को कॉल करें. साथ ही, अगर किसी दूसरे डिवाइस पर, खिलाड़ियों ने आपके ऐप्लिकेशन में साइन इन किया है, तो उन्हें यूज़र इंटरफ़ेस दिखाए बिना ही साइन इन करने की कोशिश करें.
silentSignIn()
वाला तरीका Task<GoogleSignInAccount>
दिखाता है. टास्क पूरा होने पर,
आपने उस GoogleSignInAccount
फ़ील्ड को साइन इन खाते पर सेट किया है जिसका एलान आपने टास्क के नतीजे के तौर पर किया है या यह null
पर सेट है. इससे यह पता चलता है कि कोई उपयोगकर्ता साइन इन नहीं कर चुका है.
अगर साइन इन करने की कोई कोशिश नहीं की जाती है, तो आप साइन इन करने के यूज़र इंटरफ़ेस को दिखाने के लिए वैकल्पिक रूप से साइन इन इंटेंट भेज सकते हैं, जैसा कि इंटरैक्टिव साइन इन करने में बताया गया है.
गतिविधि के फ़ोरग्राउंड में न होने पर, साइन इन किए हुए प्लेयर की स्थिति बदल सकती है. इसलिए, हमने silentSignIn()
को, गतिविधि के onResume()
तरीके से कॉल करने का सुझाव दिया है.
बिना आवाज़ के साइन इन करने के लिए, यह तरीका अपनाएं:
- बिना साइन इन वाले फ़्लो को शुरू करने के लिए,
GoogleSignInClient
परsilentSignIn()
तरीके को कॉल करें. अगर आपने साइन इन किया है, तो यह कॉलTask<GoogleSignInAccount>
ऑब्जेक्ट दिखाता है. इसमेंGoogleSignInAccount
मौजूद होता है. OnCompleteListener
में बदलाव करके, प्लेयर में साइन इन करने में आई समस्या या नाकामी को मैनेज करें.- अगर साइन इन करने का काम पूरा हो गया है, तो
getResult()
पर कॉल करकेGoogleSignInAccount
ऑब्जेक्ट पाएं. - अगर साइन इन नहीं हो पाया, तो इंटरैक्टिव साइन-इन फ़्लो लॉन्च करने के लिए, साइन इन करने का इंटेंट भेजा जा सकता है.
आप ज़्यादा कॉलबैक लिसनर का इस्तेमाल कर सकते हैं. यह जानने के लिए, Tasks एपीआई डेवलपर गाइड
और
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 साइन-इन एपीआई' एक यूज़र इंटरफ़ेस दिखाता है, जो प्लेयर को साइन इन करने के लिए अपने क्रेडेंशियल डालने का संकेत करता है. ऐसा करने से, आपके ऐप्लिकेशन को डेवलप करने में आसानी होती है. ऐसा इसलिए होता है, क्योंकि साइन इन की गतिविधि से आपके ऐप्लिकेशन की ओर से Google Play सेवाओं को अपडेट करने या सहमति के संकेत दिखाने जैसी शर्तों को मैनेज करने में मदद मिलती है. नतीजे को
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 साइन इन एपीआई' से मिलने वाले GoogleSignInAccount
में खिलाड़ी की कोई भी जानकारी मौजूद नहीं होती है. अगर आपके गेम में खिलाड़ी का डिसप्ले नेम और प्लेयर आईडी जैसी जानकारी का इस्तेमाल किया जाता है,
तो यह जानकारी वापस पाने के लिए यह तरीका अपनाएं.
getPlayersClient()
तरीके को कॉल करके और पैरामीटर के तौर परGoogleSignInAccount
में पास करके,PlayersClient
ऑब्जेक्ट पाएं.- एसिंक्रोनस रूप से लोड करने के लिए किसी प्लेयर की जानकारी वाले
Player
ऑब्जेक्ट को लोड करने के लिएPlayersClient
तरीकों का इस्तेमाल करें. जैसे, फ़िलहाल साइन इन किए हुए प्लेयर को लोड करने के लिए, आपgetCurrentPlayer()
को कॉल कर सकते हैं. अगर टास्क,ApiException
के स्टेटस कोड के साथSIGN_IN_REQUIRED
दिखता है, तो इसका मतलब है कि प्लेयर को फिर से पुष्टि करनी होगी. ऐसा करने के लिए, प्लेयर में साइन इन करने के लिएGoogleSignInClient.getSignInIntent()
को कॉल करें. - अगर टास्क सही तरीके से
Player
ऑब्जेक्ट दिखाता है, तो उसके बादPlayer
ऑब्जेक्ट के तरीकों को कॉल करके, प्लेयर की खास जानकारी ली जा सकती है. उदाहरण के लिए,getDisplayName()
याgetPlayerId()
.
साइन इन करने का बटन देना
अपने गेम में, Google को साइन इन करने के लिए स्टैंडर्ड बटन देने के लिए, इनमें से किसी एक तरीके का इस्तेमाल किया जा सकता है:
- मुख्य गतिविधि लेआउट में
com.google.android.gms.common.SignInButton
शामिल करें; या - 'Google साइन-इन' ब्रैंडिंग के दिशा-निर्देशों के मुताबिक कस्टम साइन-इन बटन डिज़ाइन करें.
जब उपयोगकर्ता साइन इन बटन पर क्लिक करते हैं, तो आपके गेम को साइन-इन फ़्लो भेजकर, साइन-इन फ़्लो शुरू करना चाहिए. इसके लिए, इंटरैक्टिव साइन-इन करना में बताए गए तरीकों का इस्तेमाल करें.
यह कोड स्निपेट दिखाता है कि आप 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. } }); }