Google Play Games Hizmetleri'ne sunucu tarafı erişim

Oyuncuların kimliklerini doğrulamanızı ve Oynatıcının kimliğini arka uç sunucusuna güvenli bir şekilde iletmelidir. Bu durumda, oyuncunun kimliğini ve diğer verilerini güvenli bir şekilde almak için oyununuza Cihazdan geçerken olası kurcalamalara maruz kalma.

Bu senaryoda, oyuncu başarıyla oturum açtıktan sonra Play Games'den tek kullanımlık özel kod (sunucu kimlik doğrulama kodu olarak adlandırılır) İstemcinin sunucuya aktardığı Hizmetler v2 SDK'sı. Ardından sunucuda sunucu kimlik doğrulama kodunu, sunucunun Google Play Games Services API'ye çağrı yapar.

Oyunlarınıza oturum açma özelliği ekleme hakkında daha fazla bilgi için şuraya bakın: Android Games'de oturum açın.

Çevrimdışı erişim için aşağıdaki adımlar gereklidir:

  1. Google Play Console'da: Oyun sunucunuz için bir kimlik bilgisi oluşturun. Kimlik bilgisinin OAuth istemci türü "web" olur.
  2. Android uygulamasında: Oturum açma işleminin bir parçası olarak ve sunucunuza iletmeniz gerekir.
  3. Oyun sunucunuzda: Sunucu yetkilendirme kodunu OAuth erişimi için değiştirin ve ardından bu anahtarı kullanarak Play Games Hizmetleri REST API'ler.

Başlamadan önce

Öncelikle oyununuzu Google Play Console, Google Play Games Hizmetleri'ni kurun ve Play Games Hizmetleri Oturum Açma'yı oyununuzla entegre edebilirsiniz.

Sunucu tarafı web uygulaması oluşturma

Google Play Oyun Hizmetleri arka uç sağlamaz Web oyunları desteği. Ancak arka uç sunucu desteği sunar. kullanabilirsiniz.

Bir web sitesini ziyaret etmek için Google Play Games hizmetleri için REST API'ler sunucu tarafı uygulamanızda şu adımları uygulayın:

  1. Google Play Console'daki oyununuzdan Play Games Hizmetleri > Kurulum ve yönetim > Yapılandırma.
  2. Kimlik bilgisi ekleme sayfasına yönlendirilmek için Kimlik bilgisi ekle'yi seçin. Kimlik bilgisi türü olarak Oyun sunucusu'nu seçin ve Yetkilendirme bölümüne geçin.
    1. Oyun sunucunuzun zaten bir OAuth istemci kimliği varsa açılır menüden bunu seçin. Değişikliklerinizi kaydettikten sonra bir sonraki bölüme geçin.
    2. Oyun sunucunuz için mevcut bir OAuth istemci kimliğiniz yoksa oluşturabilirsiniz.
      1. OAuth istemcisi oluştur'u tıklayın ve OAuth istemci kimliği oluştur bağlantısındaki talimatları uygulayın.
      2. Bu işlem sizi, oyununuzun ilişkili Cloud Platform projesi için Google Cloud Platform'da OAuth İstemci Kimliği Oluşturma sayfasına yönlendirir.
      3. Sayfanın formunu doldurun ve Oluştur'u tıklayın. Uygulama türünü Web uygulaması olarak ayarladığınızdan emin olun.
      4. Add Credential page's Authorization (Kimlik bilgisi ekleme sayfasının Yetkilendirme) bölümüne dönün, yeni oluşturulan OAuth istemcisini seçin ve değişikliklerinizi kaydedin.

Sunucu kimlik doğrulama kodunu alma

Oyununuzun arka uç sunucunuzdaki erişim jetonları için kullanabileceği bir sunucu kimlik doğrulama kodu almak için:

  1. Müşteriden requestServerSideAccess adlı kişiyi ara.

    1. Android uygulamanızın OAuth İstemci Kimliği'ni değil, oyun sunucunuz için kayıtlı OAuth İstemci Kimliği'ni kullandığınızdan emin olun.
    2. (İsteğe bağlı) Oyun sunucunuz, Play Games Hizmetleri'ne çevrimdışı erişim (yenileme jetonu kullanarak uzun ömürlü erişim) gerektiriyorsa forceRefreshToken parametresini true olarak ayarlayabilirsiniz.
    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. Değiştirilmesi için OAuth kimlik doğrulama kodu jetonunu arka uç sunucunuza gönderin, oyuncu kimliği Play Games Hizmetleri REST API'lerine göre doğrulandıktan sonra oyununuzla kimliği doğrulanır.

Sunucu yetkilendirme kodunu gönder

Sunucu kimlik doğrulama kodunu, erişim ve erişim için arka uç sunucunuza gönderin. yenileme jetonları. Play Games Services API'yi şurada çağırmak için erişim jetonunu kullanın: sağlayabilir ve isteğe bağlı olarak, yeni bir kod oluşturmak için yenileme jetonunu saklayabilir erişim jetonunun geçerlilik süresi sona erdiğinde erişilebilir.

Aşağıdaki kod snippet'i, erişim için sunucu yetkilendirme kodunu değiştirmek üzere Java programlama dili jeton. Şunu kullanır: clientserverskeleton örnek uygulaması.

/**
 * 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;
}

Sunucudan REST API'leri çağırma

Google Play Games hizmetleri için REST API'leri inceleyin sayfasına bakın.

Yararlı bulabileceğiniz REST API çağrısı örnekleri:

Oyuncu

Oturum açmış oyuncunun kimliğini ve profil verilerini almak ister misiniz? [Players.get][] numarasını ara kimlik olarak 'me' ekleyin.

Arkadaşlar

Ayrıntılar için Arkadaşlar rehberine bakın.

  • Oyuncunun arkadaş listesini almak için şunu arayın: Players.list collection olarak friends_all.

  • Arkadaş listesine erişiminiz olup olmadığını doğrulamak için şu numarayı arayın: Players.get playerID olarak me ve görüntüleyin profileSettings.friendsListVisibility alanına girmelisiniz.

Başarılar

Ayrıntılar için Başarılar kılavuzuna bakın.

  • Mevcut başarıların listesini almak için şu numarayı arayın: ReachmentDefinitions.list var.

  • Bunu bir çağrıyla birleştirin Başarılar.listesi oyuncunun kilidini açtığınızı öğrenmek için de kullanabilirsiniz.

  • Telefonla arama Başarılar.unlock kullanarak bir oyuncunun başarısının kilidini açın.

  • Telefonla arama Başarılar.artım bir başarıdaki ilerleme durumunu raporlayabilir ve oyuncunun kilidi açıp açmadığını öğrenebilirsiniz.

  • Üretime ulaşmamış bir oyunda hata ayıklıyorsanız şunları çağırabilirsiniz: Başarılar.sıfırlama veya Başarılar.resetAll yönetim API'lerinden başarıları orijinal durumlarına sıfırlamak için.

Skor tabloları

Ayrıntılı bilgi için Skor Tabloları kılavuzuna bakın.

  • Oyundaki tüm skor tablolarının listesini almak ister misiniz? Şu numarayı arayın: Leaderboards.list'i seçin.

  • Bir oyuncunun oyunu tamamlaması durumunda, skorunu şuraya gönderebilirsiniz: Scores.submit yeni bir rekor olup olmadığını öğrenebilirsiniz.

  • Bir skor tablosunu görüntülemek için Scores.list bunu kullanıcıya göstermektir.

  • Scores.listWindow'u kullanın kullanıcının rekoruna yakın bir derecelendirme yelpazesini bulmak için kullanılır.

  • Oyuncunun belirli bir skor tablosunda skoruyla ilgili daha fazla bilgi edinmek için (örneğin, oyuncu, tüm oyuncular arasında ilk% 12'lik dilimdeyse) Scores.get

  • Bir oyunda hata ayıklarsanız Puanlar.sıfırlama o oyuncunun belirli bir maçtan aldığı tüm skorları sıfırlamak için Yönetim API'lerini kullanın. skor tablosunu ekleyin.