Android गेम में साइन इन करें

Google Play की गेम सेवाओं की सुविधाओं को ऐक्सेस करने के लिए, आपके गेम को साइन-इन किए हुए खिलाड़ी के खाते से. अगर खिलाड़ी की पुष्टि नहीं हुई है, तो आपके गेम में गड़बड़ियां हो सकती हैं Google Play की गेम सेवाओं के एपीआई को कॉल करते समय. इस दस्तावेज़ में बताया गया है कि आसानी से साइन-इन करने का अनुभव दें.

खिलाड़ी के लिए साइन इन की सुविधा लागू करना

मौजूदा खाते को वापस पाने के लिए, GoogleSignInClient क्लास मुख्य एंट्री पॉइंट है और अगर उन्होंने आपके ऐप्लिकेशन पर पहले साइन-इन नहीं किया है, तो वे डिवाइस.

साइन-इन क्लाइंट बनाने के लिए, यह तरीका अपनाएं:

  1. इसके ज़रिए साइन-इन क्लाइंट बनाएं GoogleSignInOptions ऑब्जेक्ट, जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है. इस GoogleSignInOptions.Builder कॉन्फ़िगर करने के लिए, आपको कॉन्फ़िगर करना होगा GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN.

    GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
  2. अगर आपको किसी SnapshotsClient इसके बाद, .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS) को अपने GoogleSignInOptions.Builder जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है:

    GoogleSignInOptions  signInOptions =
        new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
            .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
            .build();
  3. GoogleSignIn.getClient() तरीके को कॉल करें और पास करें वे विकल्प जिन्हें आपने पिछले चरणों में कॉन्फ़िगर किया था. अगर कॉल हो जाता है, तो Google साइन-इन एपीआई GoogleSignInClient.

यह देखना कि खिलाड़ी पहले से साइन इन है या नहीं

यह देखा जा सकता है कि किसी खाते में पहले से साइन इन किया गया है या नहीं GoogleSignIn.getLastSignedInAccount() का इस्तेमाल करके मौजूदा डिवाइस पर और क्या इस खाते का इस्तेमाल करते समय GoogleSignIn.hasPermissions(). अगर दोनों शर्तें सही हैं—यानी, getLastSignedInAccount() नतीजे के तौर पर गैर-शून्य मान और hasPermissions(), true दिखाता है—आप सुरक्षित रूप से getLastSignedInAccount() से खाता वापस किया गया है, भले ही डिवाइस ऑफ़लाइन.

साइलेंट मोड में साइन इन किया जा रहा है

आपने जिस प्लेयर में साइन इन किया हुआ है उसका खाता वापस पाने के लिए, silentSignIn() पर कॉल करें. और यूज़र इंटरफ़ेस दिखाए बिना ही प्लेयर में साइन इन करने की कोशिश करें किसी दूसरे डिवाइस पर आपके ऐप्लिकेशन में साइन इन किया है.

silentSignIn() तरीका, Task<GoogleSignInAccount> दिखाता है. टास्क पूरा होने के बाद, आपने साइन इन खाते में उस GoogleSignInAccount फ़ील्ड को सेट किया है जिसका एलान पहले किया गया था नतीजे के तौर पर या null दिखाता है. इससे पता चलता है कि कोई साइन इन किया हुआ उपयोगकर्ता नहीं है.

अगर साइलेंट साइन-इन की कोशिश सफल नहीं होती, तो आपके पास विकल्प के तौर पर यह दिखाने के लिए साइन-इन इंटेंट भेजने का विकल्प होता है साइन-इन यूज़र इंटरफ़ेस, जैसा कि यहां बताया गया है इंटरैक्टिव साइन-इन करना.

गतिविधि के फ़ोरग्राउंड में न होने पर, साइन-इन किए गए प्लेयर की स्थिति बदल सकती है. इसलिए, हम silentSignIn() को गतिविधि के onResume() तरीका.

बिना बोले साइन इन करने के लिए, यह तरीका अपनाएं:

  1. साइलेंट साइन इन फ़्लो शुरू करने के लिए, GoogleSignInClient पर silentSignIn() तरीके को कॉल करें. यह कॉल एक Task<GoogleSignInAccount> ऑब्जेक्ट दिखाता है, जिसमें GoogleSignInAccount होता है, अगर साइलेंट मोड में साइन इन हो गया.
  2. ओवरराइड करके, खिलाड़ी के साइन इन करने की प्रोसेस के सफल या फ़ेल होने से जुड़ी समस्याओं को मैनेज करें OnCompleteListener.
    • अगर साइन इन करने का काम पूरा हो गया था, तो GoogleSignInAccount पाएं getResult() पर कॉल करके आपत्ति है.
    • अगर साइन-इन सफल नहीं रहा, तो आपके पास इंटरैक्टिव साइन-इन फ़्लो लॉन्च करने के लिए, साइन-इन इंटेंट भेजने का विकल्प होता है. इस्तेमाल किए जा सकने वाले अतिरिक्त कॉलबैक लिसनर की सूची के लिए, यहां देखें: 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 साइन-इन एपीआई एक यूज़र इंटरफ़ेस दिखाता है. इसमें प्लेयर को अपने क्रेडेंशियल डालने के लिए कहा जाता है साइन इन करने के लिए. यह तरीका आपके ऐप्लिकेशन को डेवलप करने की प्रक्रिया को आसान बनाता है, क्योंकि साइन-इन गतिविधि को हैंडल किया जाता है उदाहरण के लिए, आपके ऐप्लिकेशन के की ओर से. नतीजा इसके ज़रिए दिखाया जाता है: onActivityResult कॉलबैक.

इंटरैक्टिव तरीके से साइन इन करने के लिए, यह तरीका अपनाएं:

  1. साइन इन करने का इंटेंट पाने के लिए, getSigninIntent() के GoogleSignInClient पर कॉल करें और फिर कॉल करें startActivity() और उस इंटेंट को पास कर सकते हैं. नीचे दिया गया कोड स्निपेट दिखाता है कि आपका ऐप्लिकेशन इंटरैक्टिव साइन-इन फ़्लो लॉन्च करें:

    private void startSignInIntent() {
      GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
          GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
      Intent intent = signInClient.getSignInIntent();
      startActivityForResult(intent, RC_SIGN_IN);
    }
  2. 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 में कोई प्लेयर नहीं होता है जानकारी. अगर आपके गेम में खिलाड़ी की जानकारी का इस्तेमाल किया जाता है, जैसे कि प्लेयर का डिसप्ले नेम और प्लेयर आईडी, यह जानकारी वापस पाने के लिए, यह तरीका अपनाएं.

  1. getPlayersClient() तरीके को कॉल करके और पास करके, PlayersClient ऑब्जेक्ट पाएं GoogleSignInAccount को पैरामीटर के तौर पर इस्तेमाल करें.
  2. Player को एसिंक्रोनस रूप से लोड करने के लिए, PlayersClient तरीके का इस्तेमाल करें ऐसा ऑब्जेक्ट जिसमें खिलाड़ी की जानकारी हो. उदाहरण के लिए, आप getCurrentPlayer() को कॉल कर सकते हैं अभी साइन-इन किए हुए प्लेयर को लोड करने के लिए. अगर यह टास्क, स्टेटस कोड के साथ ApiException SIGN_IN_REQUIRED में से, इससे पता चलता है कि प्लेयर को फिर से पुष्टि करने की ज़रूरत है. ऐसा करने के लिए, कॉल करें GoogleSignInClient.getSignInIntent() का इस्तेमाल करके प्लेयर में इंटरैक्टिव तरीके से साइन इन किया जा सकता है.
  3. अगर टास्क, Player ऑब्जेक्ट दिखाता है, तो Player ऑब्जेक्ट की मदद से, खिलाड़ी की जानकारी वापस पाएं. उदाहरण के लिए, getDisplayName() या getPlayerId().

'साइन-इन करें' बटन उपलब्ध कराना

अपने गेम में स्टैंडर्ड '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.
        }
      });
}