משלבים את PGS Recall API במשחק

בדף הזה מוסבר איך להטמיע את Recall API במשחק. גרסאות כיסוי ראשונות הגדרה של שרת המשחק והלקוח שיתמכו ב-API, ואז מתבצעת איך לאחסן ולאחזר אסימונים.

הגדרה של שרת משחקים

צריך להגדיר את שרת המשחקים כדי לבצע קריאות ל-Recall API לשרתים של Google.

הגדרת פרויקט ב-Play Games Services

(אם עדיין לא ביצעת את הפעולה הזו) פועלים לפי ההוראות בהגדרת Google Play. שירותי משחקים.

הגדרה של חשבון שירות למשחק

מבצעים את ההוראות ליצירת שירות. חשבון. בסוף צריך להיות קובץ JSON עם פרטי כניסה של חשבון שירות.

הורדת ספריית Java בצד השרת עבור Play Games Services

הורדת הגרסה האחרונה של google-api-services-games ספרייה ולהעלות את הקובץ לשרת שלך.

הכנת פרטי הכניסה לקריאות ל-Recall API

למידע נוסף, ראו הכנה ליצירת ממשק API מואצל שיחה לקבלת הקשר נוסף.

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

הגדרה של לקוח משחק

צריך להגדיר את לקוח המשחק כך שיאחזר את מזהי סשן הריקול שמשמשים את השרת שלכם כדי לתקשר עם השרתים של Google.

ערכת Java SDK

מגדירים את Java SDK בתוך הלקוח, והקפידו לכלול com.google.android.gms:play-services-games-v2:19.0.0 והקבוצה com.google.android.gms:play-services-tasks:18.0.2 ומעלה ב-Gradle חדש.

כדי לתקשר עם השרתים של Google עם המידע הנכון, צריך לבקש הכרת מזהה הסשן מה-SDK של הלקוח, שאותו אתם שולחים לשרת של המשחק:

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

שימוש ב-Recall API בשרת המשחק

אחרי הגדרת השרת והלקוח, אפשר לשלוח את recallSessionID מלקוח המשחק לשרת המשחק, ופועלים לפי ההנחיות שבהמשך כדי להתחיל באמצעות Java API כדי לאחסן, לאחזר או למחוק את אסימוני Recall בצד השרת.

אסימוני אחסון

אחסון הפרסונה של המשתמש ואסימון המשחק באמצעות האובייקט LinkPersonaRequest. אפשר להשתמש בGoogleCredential כדי להתקשר ל-Google ממשקי API. לעמוד בעוצמה (cardinality) 1:1 אילוץ, אפשר לקשר רק פרסונה אחת לפרופיל PGS אחד בכל פעם, ולהיפך. מגדירים את המדיניות בנושא פתרון בעיות במקרה שפרופיל PGS הזה כבר קושר לחשבון אחר פרסונה.

אפשר גם להגדיר TTL באסימון, שמציין כמה זמן האסימון חוקי באמצעות Durations לאובייקט. אפשר להגדיר את האפשרות הזו באמצעות SetTtl() (כפי שמוצג בהמשך), שמגדיר את תאריך התפוגה מתוך משך הזמן שצוין בשיטה, או setExpireTime(), שמאפשר להגדיר את הזמן המדויק שבו פג התוקף של האסימונים.

עליך להצפין את הפרסונה ואת אסימון המשחק, והם לא יכולים להכיל מידע אישי פרטים מזהים (PII). מחרוזות פרסונה ואסימון יכולות להיות עד 256 באורך של תווים, ויכולות להיות לכל היותר 20 אסימונים או פרסונות לכל היותר שחקן לכל משחק.

ניתן לאחסן אסימון אחד בלבד לכל פרסונה לכל שחקן בכל זמן נתון. אם תנסה כדי לאחסן אסימון אחר עם אותה פרסונה, המערכת מחליפה את המקורי ב-Assistant.

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
}

אחזור אסימונים

כדי לאחזר את אסימון הריקול, צריך לקבל את recallSessionId מהלקוח. להעביר אותו ל-API של retrieveTokens:

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
}

מחיקת אסימון הזיכרון

במקרה הצורך, אפשר גם למחוק את אסימון הריקול באמצעות הקריאה הבאה:

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

הפעלת מצב ללא פרופיל

אפשר להפעיל את הפונקציונליות מוגבלת של Recall API. עבור משתמשים שאין להם פרופיל Play Games Services:

  1. הפעלת ריקול ללא פרופיל לפרויקט המשחק שלך ב-Play Games Services ב-Play Developer מסוף. בוחרים באפשרות עם התווית
  2. אפשר לעיין בתנאים הנוספים שמתוארים בהמשך הקטע הזה.
  3. הוספת תג המטא-נתונים הבא לאפליקציה מניפסט:
<meta-data
  android:name="com.google.android.gms.games.PROFILELESS_RECALL_ENABLED"
  android:value="true" />

תנאים נוספים

בנוסף לציות לתנאים של Play Games Services: השירות, אתם מסכימים לכך שאם תשתמשו ב-Recall API לצורך משתמשים ללא פרופיל PGS, מה שמאפשר שיתוף בנתונים של משתמש הקצה ב-Google בלי שיהיה לו פרופיל ב-Play Games Services, לפני שתשתף נתונים כאלה עם Google, עליך לספק למשתמש הקצה הודעה הולמת שמתארת 1) שיתוף הנתונים שלך עם Google כדי לאפשר Play Games תכונת קישור החשבונות, 2) זמינות ההגדרות לניהול כמו שיתוף, למשל דרך ההגדרות של Play Games, וגם 3) עיבוד של במסגרת מדיניות מדיניות הפרטיות של Google מדיניות, ומשיגים משתמשי קצה מתאימים לקבל הסכמה לשיתוף כזה שעומד בכל הדרישות המשפטיות הרלוונטיות.