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

בדף הזה מוסבר איך להעביר את קוד הלקוח מ-Play Games Services מגרסה 1 לגרסה 2.

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

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

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

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

אם אתם משתמשים במערכת ה-build של Gradle, כדי לעשות את זה צריך לשנות את התלות בארטיפקט 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);
}

הסרת שיחות כניסה ויציאה

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

  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. מסירים את התלות ב-GoogleSignIn API, אם הוא כבר לא בשימוש.

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

כשיוצרים לקוחות (למשל 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 via the Play Games Services REST APIs.
    } else {
      // Failed to retrieve authentication code.
    }
});

הסרת היקפים מיותרים

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

העברה מ-GoogleApiClient

לשילובים קיימים יותר, המשחק עשוי להשתנות בהתאם לגרסה של GoogleApiClient API של 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