PGS Recall API'yi oyununuza entegre edin

Bu sayfada, Recall API'nin gösterir. İlk olarak oyun sunucunuzu ve istemcinizi ve jetonların nasıl depolanacağını ve alınacağını anlatır.

Oyun sunucusu kurulumu

Oyun sunucunuzu, Google sunucularına Recall API çağrıları yapacak şekilde ayarlayın.

1. Play Games Hizmetleri projenizi oluşturun

(Henüz yapmadıysanız) Google Play'i Kurma Oyun Hizmetleri.

2. Oyun için hizmet hesabı oluşturun

Hizmet oluşturma talimatlarını uygulayın: hesap. Sonunda, hizmet hesabı kimlik bilgilerini içeren bir JSON dosyanız olmalıdır.

3. PlayGamesServices için sunucu tarafı Java kitaplığını indir

En son google-api-services-games'i indirin kitaplık ve bunu sunucunuza yükleyin.

4. Recall API çağrıları için kimlik bilgilerini hazırlama

Yetkili API oluşturmaya hazırlanma arayın inceleyebilirsiniz.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.games.Games;
import com.google.api.services.games.GamesScopes;

// ...

GoogleCredential credential =
  GoogleCredential.fromStream(new FileInputStream("<credentials>.json"))
    .createScoped(Collections.singleton(GamesScopes.ANDROIDPUBLISHER));

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

Oyun istemcisi kurulumu

Oyun istemcinizi, sunucunuz tarafından kullanılan geri çağırma oturum kimliklerini alacak şekilde kurun Google sunucularıyla iletişim kurabilirsiniz.

Java SDK'sı

İstemcinizde Java SDK'yı kurun ve com.google.android.gms:play-services-games-v2:19.0.0 eklediğinizden emin olun ve üzerinizde com.google.android.gms:play-services-tasks:18.0.2 veya üzeri gradle dosyası olarak kaydeder.

Google'ın sunucularıyla doğru bilgilerle iletişim kurmak için şunları yapmanız gerekir: istemci SDK'sından bir Geri Çağırma oturumu kimliği isteyin. Bu kimliği, oyununuzun sunucu.

Kotlin

PlayGames.getRecallClient(getActivity())
                .requestRecallAccess()
                .addOnSuccessListener { recallAccess -> val recallSessionId: String = recallAccess.getSessionId() }
                // Send the recallSessionId to your game server

Java

PlayGames.getRecallClient(getActivity())
  .requestRecallAccess()
  .addOnSuccessListener(
    recallAccess -> {
      String recallSessionId = recallAccess.getSessionId();
      // Send the recallSessionId to your game server
    });

Unity SDK'sı

Henüz yapmadıysanız gerekir.

Google'ın sunucularıyla doğru bilgilerle iletişim kurmak için şunları yapmanız gerekir: istemci SDK'sından bir Recall oturum kimliği isteyin ve bunu oyununuzun sunucu.

PlayGamesPlatform.Instance.RequestRecallAccess(
    recallAccess => {
        string recallSessionId = recallAccess.sessionId;
        // Send the recallSessionId to your game server
    });

Oyun sunucunuzdaki Recall API'sini kullanın

Sunucunuzu ve istemcinizi yapılandırdıktan sonra, recallSessionID bağlayıp aşağıdaki talimatları uygulayarak sunucu tarafında geri çağırma jetonlarını depolamak, almak veya silmek için Java API'yi kullanma.

Mağaza jetonları

Kullanıcıların karakter ve oyun jetonu, LinkPersonaRequest kullanılarak depolanabilir nesnesini tanımlayın. Google API'lerini çağırmak için GoogleCredential kullanmanız gerekir (bkz. Arama Google API'ler ). 1:1 kardinaliteye göre kısıt, yalnızca bir karakter bağlayabilirsiniz. Tek seferde bir PGS profiline bağlanabilir (veya tam tersi).Çözünürlüğü, politikasını dikkate almanızı öneririz.

İsteğe bağlı olarak, jeton üzerinde ne kadar süreyle geçerli olacak bir TTL ayarlamayı seçebilirsiniz. jetonun geçerli olup olmadığını kontrol etmek için Süreler nesnesini tanımlayın. Bunu, aşağıda gösterildiği gibi SetTtl() kullanarak ayarlayabilirsiniz: yöntemde belirtilen zaman aralığındaki son kullanma tarihi veya setExpireTime(), jetonların süresinin tam olarak ne zaman dolacağını belirlemenizi sağlar.

Karakter ve oyun jetonunu şifrelemeniz gerekir. Bunlar kişisel bilgi içeremez kimliği tanımlayabilecek bilgilerdir. Karakter ve jeton dizeleri en fazla 256 karakter olabilir uzunluğunda olabilir ve kullanıcı başına en fazla 20 jeton veya karakter depolanabilir. oyuncu sayısı.

Belirli bir zamanda, her oyuncu için karakter başına yalnızca bir jeton depolanabilir. Şunları deniyoruz: aynı karaktere sahip başka bir jetonun depolanması, orijinal jetonun üzerine yazılmasını sağlar.

import com.google.api.services.games.Games.Recall.LinkPersona;
import com.google.api.services.games.model.LinkPersonaRequest;
import com.google.api.services.games.model.LinkPersonaResponse;
import com.google.protobuf.util.Durations;

// ...

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

String recallSessionId = ... // recallSessionID from game client
String persona = ... // encrypted opaque string, stable for in-game account
String token = ... // encrypted opaque string encoding the progress line

LinkPersonaRequest linkPersonaRequest =
  LinkPersonaRequest.newBuilder()
    .setSessionId(recallSessionId)
    .setPersona(persona)
    .setToken(token)
    .setCardinalityConstraint(ONE_PERSONA_TO_ONE_PLAYER)
    .setConflictingLinksResolutionPolicy(CREATE_NEW_LINK)
    .setTtl(Durations.fromDays(7)) // Optionally set TTL for token
    .build();

LinkPersonaResponse linkPersonaResponse =
  gamesApi.recall().linkPersona(linkPersonaRequest).execute();

if (linkPersonaResponse.getState() == LINK_CREATED) {
  // success
}

Jetonları al

Oyunlarınızın özelliklerine bağlı olarak jeton almak için üç seçeneğiniz vardır gerekiyor. Şunları yapabilirsiniz: şunları isteyin:

  • Oyun kapsamlı geri çağırma jetonları da dahil olmak üzere mevcut oyunla ilişkilendirilen jetonlar.
  • Geliştirici hesabına ait tüm oyunlarda depolanan son jeton.
  • Geliştirici hesabına ait oyunların listesinde, tüm Recall jetonları her oyunla ilişkilendirilebilir.
ziyaret edin.

Oyun kapsamlı geri çağırma jetonları

Mevcut oyundan geri çağırma jetonlarını almak için recallSessionId işlemini istemciden alıp retrieveTokens API'sine iletir:

import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrievePlayerTokensResponse;
import com.google.api.services.games.model.RecallToken;

// ...

String recallSessionId = ... // recallSessionID from game client

RetrievePlayerTokensResponse retrievePlayerTokensResponse =
  gamesApi.recall().retrieveTokens(recallSessionId).execute();

for (RecallToken recallToken : retrievePlayerTokensResponse.getTokens()) {
  String token recallToken.getToken();
  // Same string as was written in LinkPersona call
  // decrypt and recover in-game account
}

Geliştirici hesabına ait tüm oyunlardaki en son geri çağırma jetonu

Geliştiricinin sahip olduğu tüm oyunlarda depolanan en son jetonu almak için Google Play Console'da hesabınız varsa recallSessionId lastTokenFromAllDeveloperGames API'sine iletirsiniz. aşağıdaki kod snippet'inde gösteriliyor. Yanıt kapsamında şunları denetleyebilirsiniz: ilişkilendirilmiş Uygulama Kimliği bu jetonla işlem yapacaksınız.

import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrieveDeveloperGamesLastPlayerTokenResponse;
import com.google.api.services.games.model.GamePlayerToken;
import com.google.api.services.games.model.RecallToken;

// ...

String recallSessionId = ... // recallSessionID from game client

RetrieveDeveloperGamesLastPlayerTokenResponse response =
        gamesApi.recall().lastTokenFromAllDeveloperGames(recallSessionId)
        .execute();

if (response.hasGamePlayerToken()) {
    GamePlayerToken gamePlayerToken = response.getGamePlayerToken();

    // The ID of the application that the token is associated with.
    String applicationId = gamePlayerToken.getApplicationId();

    // Same string as was written in LinkPersona call.
    RecallToken recallToken = gamePlayerToken.getRecallToken();

    // Decrypt and recover in-game account.
}

Geliştirici hesabına ait belirli bir oyun listesindeki tüm Recall jetonları

Sahibi olduğu oyunların bir listesiyle ilişkilendirilmiş tüm jetonları almak için Google Play Console'da geliştirici hesabınıza recallSessionId gamesPlayerTokens API'sine iletir. Sağlayın: Uygulama Kimlikleri listesine gidin.

import com.google.api.services.games.Games;
import com.google.api.services.games.model.RetrieveGamesPlayerTokensResponse;
import com.google.api.services.games.model.GamePlayerToken;
import com.google.api.services.games.model.RecallToken;

// ...

String recallSessionId = ... // recallSessionID from game client

// Application IDs for which you would like to retrieve the recall tokens.
List<String> applicationIds = ...

RetrieveGamesPlayerTokensResponse response =
gamesApiClient
        .recall()
        .gamesPlayerTokens(recallSessionId)
        .setApplicationIds(applicationIds)
        .execute();

for (GamePlayerToken gamePlayerToken : response.getGamePlayerTokens()) {
    // The ID of the application that the token is associated with.
    String applicationId  = gamePlayerToken.getApplicationId();


    // Same string as was written in LinkPersona call.
    RecallToken recallToken = gamePlayerToken.getRecallToken();
    
    // Decrypt and recover in-game account.
}

Geri çağırma jetonunu sil

Gerekirse geri çağırma jetonunu aşağıdaki çağrıyla da silebilirsiniz:

import com.google.api.services.games.Games;
import com.google.api.services.games.model.UnlinkPersonaRequest;
import com.google.api.services.games.model.UnlinkPersonaResponse;

// ...

String recallSessionId = ...
String persona = ...
String token = ...

Games gamesApi =
    new Games.Builder(httpTransport, JSON_FACTORY, credential).build();

UnlinkPersonaRequest unlinkPersonaRequest =
  UnlinkPersonaRequest.newBuilder()
    .setSessionId(recallSessionId)
    .setPersona(persona)
    // .setToken(token) - alternatively set token, but not both
    .build();

UnlinkPersonaResponse unlinkPersonaResponse =
  gamesApi.recall().unlinkPersona(unlinkPersonaRequest).execute();

boolean unlinked = unlinkPersonaResponse.isUnlinked();

Profilsiz modu etkinleştir

Sınırlı Recall API işlevini etkinleştirebilirsiniz aşağıdaki adımları uygulayarak PGS profili olmayan kullanıcılar için:

  1. Play Console'da PGS oyun projeniz için profilsiz geri çağırmayı etkinleştirin Konsol. &quot;Etkinleştir&quot; etiketli seçeneği
depolama alanı&quot; olarak adlandırılır..
  2. Bu bölümün ilerleyen kısımlarında açıklanan ek şartları inceleyin.
  3. Aşağıdaki meta veri etiketini uygulamanıza ekleyin manifesto içinde görünen)
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

Ek şartlar

Bunun yanı sıra, Play Games Hizmetleri Hizmet'in şartlarını kabul edersiniz ve PGS profili olmayan kullanıcılar için Recall API'sini kullanarak, Play Games Hizmetleri profiline sahip olmadan son kullanıcı verilerini Google ile paylaşma, bu tür verileri Google ile paylaşmadan önce son kullanıcıya 1) Google ile veri paylaşımınızı açıklayan uygun bildirim Play Games hesap bağlama özelliği, 2) yönetilecek ayarların kullanılabilirliği aracılığıyla yapılan paylaşımlar ve 3) geri bildirimlerin işlenmesi ve Google Gizlilik Politikası Politikaya tabi ve uygun son kullanıcıyı ve geçerli tüm yasal şartları karşılayan bu tür bir paylaşım için onay almanız gerekir.