מעבר לגרסה 2 של תהליך הכניסה ל-Play Games Services

במדריך הזה מוסבר איך להעביר את קוד הלקוח מ-Play Games Services v1 ל-v2.

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

  1. הכניסה לחשבון מופעלת באופן אוטומטי כשמפעילים את המשחק. במקום להשתמש ב-GoogleSignIn SDK GoogleSignInClient ב-SDK כדי לבצע כניסה, אפשר להשתמש ב-GamesSignInClient.isAuthenticated() כדי לאחזר את התוצאה של ניסיון הכניסה האוטומטית.
  2. לא תצטרכו להעביר אובייקט GoogleSignInAccount לכיתות של Client Factory. אי אפשר לבקש עוד היקפי הרשאות OAuth (הבקשה תישלח באופן אוטומטי ל-GAMES_LITE).
  3. אסימוני אימות ניתנים עכשיו באמצעות GamesSignInClient.requestServerSideAccess() ב-SDK של Play Games Services.
  4. שיטת היציאה הוסרה, ולא יהיה יותר צורך בלחצן במשחק כדי להיכנס לחשבון ב-Play Games Services או לצאת ממנו.

בנוסף, יהיו במשחק כניסות נוספות בגלל הכניסה האוטומטית כשהמשחק יושק. לכן, כדאי לבדוק את ניהול המכסות כדי לוודא שהמשחק לא חורג מהמכסה של בקשות ההתחברות.

טירגוט למאגר Maven החדש ב-SDK

אם אתם משתמשים במערכת ה-build של Gradle, תוכלו לעשות זאת על ידי שינוי התלות ב-artifact com.google.android.gms:play-services-games-v2:+ בקובץ build.gradle של המודול. לדוגמה:

dependencies {
 implementation "com.google.android.gms:play-services-games-v2:+"
}

אתחול ה-SDK

אתחול ה-SDK של Play Games ב-callback של onCreate(..) בכיתה Application. לדוגמה:

import com.google.android.gms.games.PlayGamesSdk;

...

@Override
public void onCreate(){
  super.onCreate();
  PlayGamesSdk.initialize(this);
}

הסרת הקריאות לכניסה וליציאה מהחשבון

אם לא מציינים היקפים נוספים, ההעברה של תרחיש לדוגמה אמורה להיות פשוטה.

  1. הסרת קריאות כניסה באמצעות GoogleSignIn API. הכניסה תתבצע תמיד בזמן ההפעלה של המשחק. במקום זאת, אפשר להאזין לתוצאה של ניסיון הכניסה האוטומטי באמצעות GamesSignInClient.isAuthenticated().

    GamesSignInClient gamesSignInClient = PlayGames.getGamesSignInClient(getActivity());
    
    gamesSignInClient.isAuthenticated().addOnCompleteListener(isAuthenticatedTask -> {
      boolean isAuthenticated =
        (isAuthenticatedTask.isSuccessful() &&
         isAuthenticatedTask.getResult().isAuthenticated());
    
      if (isAuthenticated) {
        // Continue with Play Games Services
      } else {
        // Disable your integration with Play Games Services or show a
        // login button to ask  players to sign-in. Clicking it should
        // call GamesSignInClient.signIn().
      }
    });
    
  2. להסיר את כל הקריאות ליציאה, כי ניהול החשבון נמצא עכשיו בהגדרות של מערכת ההפעלה ובאפליקציית Play Games.

  3. אם השחקן מחובר לחשבון, צריך להסיר מהמשחק את לחצן הכניסה של Play Games. אם המשתמש יבחר לא להיכנס לחשבון כשהמשחק יופעל, תוכלו להמשיך להציג לחצן עם סמל Play Games ולהפעיל את תהליך הכניסה באמצעות GamesSignInClient.signIn().

  4. אחרי שתבדקו שהמשתמש נכנס לחשבון, תוכלו לאחזר את מזהה המשתמש כדי לזהות אותו.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. עליך להסיר את התלות ב-API של GoogleSignIn, אם הוא כבר לא בשימוש.

עדכון שמות של מחלקות לקוח

כשיוצרים לקוחות (למשל, LeaderboardsClient או AchievementsClient), צריך להשתמש ב-PlayGames.getFooClient() ולא ב-Games.getFooClient().

שליחת בקשה לגישה בצד השרת

כשמבקשים גישה בצד השרת, צריך להשתמש ב-GamesSignInClient.requestServerSideAccess() במקום ב-GoogleSignInAccount.getServerAuthCode().

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 with the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

הסרת היקפי גישה נוספים

בגרסה 2 של שירותי Play Games אי אפשר לבקש היקפי הרשאה נוספים. אם אתם עדיין צריכים לבקש היקפים נוספים, מומלץ להשתמש ב-SDK לכניסה באמצעות Google לצד Play Games Services.

מעבר מ-GoogleApiClient

בשילובים ישנים יותר של המשחק, יכול להיות שהמשחק תלוי בגרסת ה-API של GoogleApiClient של Play Games Services SDK. האפשרות הזו הווצאה משימוש בסוף שנת 2017 והוחלפה בלקוחות 'ללא חיבור'. כדי להעביר את הקוד, אפשר להחליף את הכיתה GoogleApiClient בכיתה מקבילה ללא חיבור. אחר כך תצטרכו גם לפעול לפי ההנחיות שמפורטות בדף הזה כדי להעביר את המשחק מגרסה 1 לגרסה 2. לפניכם מיפוי של כיתות נפוצות:

com.google.android.gms.games.achievement.Achievements ->
    com.google.android.gms.games.AchievementsClient

com.google.android.gms.games.leaderboard.Leaderboard ->
    com.google.android.gms.games.LeaderboardsClient

com.google.android.gms.games.snapshot.Snapshots ->
    com.google.android.gms.games.SnapshotsClient

com.google.android.gms.games.stats.PlayerStats ->
    com.google.android.gms.games.PlayerStatsClient

com.google.android.gms.games.Players ->
    com.google.android.gms.games.PlayersClient

com.google.android.gms.games.GamesStatusCodes ->
    com.google.android.gms.games.GamesClientStatusCodes