Google Play की गेम सेवाओं का सर्वर साइड ऐक्सेस

हमारा सुझाव है कि आप खिलाड़ियों की पहचान की पुष्टि करें और प्लेयर की पहचान सुरक्षित तरीके से बैकएंड सर्वर पर पास करें. यह चालू करता है ताकि प्लेयर की पहचान और अन्य डेटा सुरक्षित तरीके से वापस पाया जा सके. डिवाइस से गुज़रते समय संभावित छेड़छाड़ का सामना करना.

ऐसी स्थिति में, खिलाड़ी के साइन इन करने के बाद, आपके पास Play Games से, एक बार इस्तेमाल होने वाला खास कोड (इसे सर्वर पुष्टि कोड कहा जाता है) Services v2 SDK टूल, जिसे क्लाइंट सर्वर को पास करता है. इसके बाद, सर्वर पर सर्वर से पुष्टि करने के कोड को OAuth 2.0 टोकन से बदल दें, ताकि सर्वर इसका इस्तेमाल कर सके Google Play की गेम सेवाओं के एपीआई को कॉल कर सकते हैं.

अपने गेम में साइन इन करने की सुविधा को जोड़ने के बारे में ज़्यादा जानकारी पाने के लिए, यहां जाएं Android गेम के लिए साइन-इन करें.

ऑफ़लाइन ऐक्सेस करने के लिए, यह तरीका अपनाएं:

  1. Google Play Console में: अपने गेम सर्वर के लिए क्रेडेंशियल बनाएं. क्रेडेंशियल का OAuth क्लाइंट टाइप "वेब" होगा.
  2. Android ऐप्लिकेशन में: साइन-इन करने के दौरान, अपने रिकॉर्ड करना होगा और उसे अपने सर्वर पर भेजना होगा.
  3. अपने गेम सर्वर पर: OAuth ऐक्सेस पाने के लिए, सर्वर के ऑथराइज़ेशन कोड का इस्तेमाल करें टोकन का उपयोग करें, और फिर इसका उपयोग Play की गेम सेवाएं REST API.

शुरू करने से पहले

आपको सबसे पहले अपना गेम इसमें जोड़ना होगा Google Play Console, जैसा कि इसमें बताया गया है Google Play की गेम सेवाएं सेट अप करना, और अपने गेम के साथ Play की गेम सेवाओं में साइन इन की सुविधा जोड़ें.

सर्वर साइड वेब ऐप्लिकेशन बनाना

Google Play की गेम सेवाओं पर बैक-एंड की सुविधा उपलब्ध नहीं है सहायता मिलती है. हालांकि, यह बैक-एंड सर्वर की सुविधा देता है Android गेम के सर्वर के लिए उपलब्ध है.

अगर आपको Google Ads API का इस्तेमाल करना है, Google Play की गेम सेवाओं के लिए REST API ऐसा करने के लिए, यह तरीका अपनाएं:

  1. Google Play Console में अपने गेम से, Play की गेम सेवाएं > सेटअप और मैनेजमेंट > कॉन्फ़िगरेशन.
  2. क्रेडेंशियल जोड़ें पेज पर लाने के लिए, क्रेडेंशियल जोड़ें चुनें. क्रेडेंशियल टाइप के तौर पर गेम सर्वर चुनें और अनुमति सेक्शन में जाएं.
    1. अगर आपके गेम सर्वर का OAuth क्लाइंट आईडी पहले से मौजूद है, तो ड्रॉप-डाउन मेन्यू से उसे चुनें. बदलावों को सेव करने के बाद, अगले सेक्शन पर जाएं.
    2. अगर आपके पास अपने गेम सर्वर के लिए, कोई मौजूदा OAuth क्लाइंट आईडी नहीं है, तो एक OAuth क्लाइंट आईडी बनाया जा सकता है.
      1. OAuth क्लाइंट बनाएं पर क्लिक करें और OAuth क्लाइंट आईडी बनाएं लिंक पर क्लिक करें.
      2. इससे आपको अपने गेम से जुड़े Cloud Platform प्रोजेक्ट के लिए, Google Cloud Platform के OAuth क्लाइंट आईडी बनाएं पेज पर ले जाया जाएगा.
      3. पेज का फ़ॉर्म भरें और 'बनाएं' पर क्लिक करें. ऐप्लिकेशन के टाइप को वेब ऐप्लिकेशन पर सेट करना न भूलें.
      4. क्रेडेंशियल पेज के ऑथराइज़ेशन को जोड़ें सेक्शन पर वापस जाएं और नया OAuth क्लाइंट चुनें और अपने बदलावों को सेव करें.

सर्वर का ऑथराइज़ेशन कोड पाएं

सर्वर ऑथराइज़ेशन कोड को फिर से पाने के लिए, जिसका इस्तेमाल आपका गेम आपके बैकएंड सर्वर पर ऐक्सेस टोकन के लिए कर सके:

  1. क्लाइंट के फ़ोन नंबर requestServerSideAccess पर कॉल करें.

    1. पक्का करें कि आपके गेम सर्वर पर रजिस्टर किए गए OAuth क्लाइंट आईडी का इस्तेमाल किया जा रहा हो, न कि अपने Android ऐप्लिकेशन के OAuth क्लाइंट आईडी का.
    2. (ज़रूरी नहीं) अगर आपके गेम सर्वर को Play की गेम सेवाओं के लिए ऑफ़लाइन ऐक्सेस (रीफ़्रेश टोकन का इस्तेमाल करके लंबे समय तक चलने वाले ऐक्सेस) की ज़रूरत है, तो forceRefreshToken पैरामीटर को 'सही' पर सेट करें.
    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(this);
    gamesSignInClient
      .requestServerSideAccess(OAUTH_2_WEB_CLIENT_ID, /* forceRefreshToken= */ false)
      .addOnCompleteListener( task -> {
        if (task.isSuccessful()) {
          String serverAuthToken = task.getResult();
          // Send authentication code to the backend game server to be
          // exchanged for an access token and used to verify the player
          // via the Play Games Services REST APIs.
        } else {
          // Failed to retrieve authentication code.
        }
    });
    
  2. OAuth पुष्टि कोड टोकन को अपने बैकएंड सर्वर पर भेजें, ताकि इसे एक्सचेंज किया जा सके. साथ ही, Play की गेम सेवाओं के REST API से प्लेयर आईडी की पुष्टि हो जाए और इसके बाद आपके गेम की पुष्टि की जा सके.

सर्वर का ऑथराइज़ेशन कोड भेजें

अपने बैकएंड सर्वर पर, सर्वर से पुष्टि करने वाला कोड भेजें, ताकि ऐक्सेस मिल सके और टोकन रीफ़्रेश करें. 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;
}

सर्वर से REST API को कॉल करें

Google Play गेम सेवाओं के लिए REST API देखें देखें.

आपके काम के REST API कॉल के उदाहरणों में ये शामिल हैं:

खिलाड़ी

क्या आपको साइन इन किए हुए खिलाड़ी का आईडी और प्रोफ़ाइल डेटा चाहिए? [Players.get][] को कॉल करो 'me' का आईडी होना चाहिए.

दोस्त

ज़्यादा जानकारी के लिए, दोस्त गाइड देखें.

  • खिलाड़ी के दोस्तों की सूची फिर से पाने के लिए, कॉल करें Players.list friends_all के साथ collection.

  • आपके पास दोस्तों की सूची का ऐक्सेस है या नहीं, इसकी पुष्टि करने के लिए कॉल करें Players.get me के साथ playerID और देखें profileSettings.friendsListVisibility फ़ील्ड में डालें.

उपलब्धियां

ज़्यादा जानकारी के लिए उपलब्धियां गाइड देखें.

  • मौजूदा उपलब्धियों की सूची पाने के लिए, इस नंबर पर कॉल करें Availablementपरिभाषाओं की सूची.

  • इसे इस कॉल से जोड़ें उपलब्धियों की सूची ताकि यह देखा जा सके कि प्लेयर ने किन ऐप्लिकेशन को अनलॉक किया था.

  • कॉल करें उपलब्धियां.अनलॉक खिलाड़ी की उपलब्धि को अनलॉक करने के लिए.

  • कॉल करें Availablements.increment का इस्तेमाल किया जा सकता है.

  • अगर किसी ऐसे गेम को डीबग किया जा रहा है जो अभी प्रोडक्शन में नहीं पहुंच पाया है, तो आपको Availablements.reset या Availablements.resetAll का इस्तेमाल कर सकता है.

लीडरबोर्ड

ज़्यादा जानकारी के लिए लीडरबोर्ड गाइड देखें.

  • क्या आपको गेम के सभी स्कोरबोर्ड की सूची चाहिए? इन्हें कॉल करें लीडरबोर्ड.सूची.

  • अगर किसी खिलाड़ी ने गेम खेला है, तो उसका स्कोर Scores.submit और यह पता करें कि यह एक नया सबसे ज़्यादा स्कोर है या नहीं.

  • लीडरबोर्ड दिखाने के लिए, Scores.list और उसे उपयोगकर्ता को दिखा सकता है.

  • Scores.listWindow का इस्तेमाल करें का इस्तेमाल करके, उपयोगकर्ता के सबसे ज़्यादा स्कोर के आस-पास के अलग-अलग तरह के स्कोर खोजें.

  • किसी खास लीडरबोर्ड में, खिलाड़ी के स्कोर के बारे में ज़्यादा जानकारी पाने के लिए (उदाहरण के लिए, अगर खिलाड़ी सभी खिलाड़ियों के शीर्ष 12% में शामिल है), तो Scores.get.

  • किसी गेम को डीबग करने के बाद, Scores.reset का इस्तेमाल करके किसी खास प्लेयर के सभी स्कोर को रीसेट किया जा सकता है. लीडरबोर्ड.