PGS Recall API'yi oyununuza entegre edin

Bu sayfada, Recall API'yi oyununuzda nasıl uygulayacağınız açıklanmaktadır. Öncelikle oyun sunucunuzu ve istemcinizi API'yi destekleyecek şekilde ayarlama, daha sonra jetonları depolama ve alma üzerinden geçiyoruz.

Oyun sunucusu kurulumu

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

Play Oyun Hizmetleri projenizi oluşturma

(Henüz tamamlamadıysanız) Google Play Oyun Hizmetlerini Kurma bölümündeki talimatları uygulayın.

Oyun için bir hizmet hesabı oluşturun

Hizmet hesabı oluşturma talimatlarını uygulayın. Son olarak, hizmet hesabı kimlik bilgilerini içeren bir JSON dosyanız olur.

Play Oyun Hizmetleri için sunucu tarafı Java kitaplığı indirin

En son google-api-services-games kitaplığını indirip sunucunuza yükleyin.

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

Daha fazla bilgi için Yetki verilmiş bir API çağrısı yapmaya hazırlanma bölümüne bakın.

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, Google sunucularıyla iletişim kurmak için sunucunuz tarafından kullanılan geri çağırma oturumu kimliklerini alacak şekilde ayarlayın.

Java SDK'sı

İstemcinizde Java SDK'yı kurun ve Gradle dosyanıza com.google.android.gms:play-services-games-v2:19.0.0 ve com.google.android.gms:play-services-tasks:18.0.2 veya üst sürümlerini eklediğinizden emin olun.

Google'ın sunucularıyla doğru bilgilerle iletişim kurmak için istemci SDK'sından oyununuzun sunucusuna göndereceğiniz bir Recall oturum kimliği isteyin:

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
  });

Oyun sunucunuzda Recall API'sini kullanma

Sunucunuzu ve istemcinizi yapılandırdıktan sonra, recallSessionID öğesini oyun istemcinizden oyun sunucunuza gönderebilir ve Recall jetonlarını sunucu tarafında depolamak, almak veya silmek amacıyla Java API'yi kullanmaya başlamak için aşağıdaki talimatları uygulayabilirsiniz.

Mağaza jetonları

LinkPersonaRequest nesnesini kullanarak kullanıcının karakterini ve oyun jetonunu depolayın. Google API'lerini çağırmak için GoogleCredential öğesini kullanın. 1:1 kardinalite kısıtlamasına uymak için tek seferde yalnızca bir karakter ile bir PGS profili arasında bağlantı oluşturabilirsiniz. Bu PGS profilinin zaten başka bir karaktere bağlanmış olması ihtimaline karşı çözüm politikasını belirleyin.

İsteğe bağlı olarak jeton üzerinde bir Durations nesnesi kullanarak jetonun ne kadar süreyle geçerli olduğunu belirten bir TTL ayarlamayı seçebilirsiniz. Bunu, geçerlilik bitiş tarihini yöntemde belirtilen süreye göre ayarlayan SetTtl() özelliğini (aşağıda gösterildiği gibi) veya jetonların süresinin ne zaman dolduğunu kesin bir şekilde ayarlamanıza olanak tanıyan setExpireTime() özelliğini kullanarak ayarlayabilirsiniz.

Karakter ve oyun jetonunu şifrelemeniz gerekir, bunlar kimlik bilgileri içeremez. Karakter ve jeton dizeleri en fazla 256 karakter uzunluğunda olabilir ve oyun başına oyuncu başına en fazla 20 jeton veya karakter depolanabilir.

Belirli bir zamanda her oyuncu için karakter başına yalnızca bir jeton depolanabilir. Aynı karakterle başka bir jeton depolamaya çalışırsanız sistem, orijinal jetonun üzerine yazar.

import com.google.api.services.games.Games.Recall.LinkPersona;
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

Geri çağırma jetonunu almak için istemciden recallSessionId kodunu alın ve retrieveTokens API'ye iletin:

import com.google.api.services.games.Games.Recall.RetrieveTokens;

// ...

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
}

Geri çağırma jetonunu sil

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

import com.google.api.services.games.Games.Recall.UnlinkPersona;

// ...

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();

// Confirm that the unlinking process completed successfully.
boolean unlinked = unlinkPersonaResponse.isUnlinked();