בדף הזה מוסבר איך להעביר את קוד הלקוח מ-Play Games Services מגרסה 1 לגרסה 2.
ערכת ה-SDK החדשה כוללת ארבעה שינויים עיקריים שנועדו לשפר את הצלחת הכניסה, שחשוב שתהיו מודעים להם:
- הכניסה מופעלת באופן אוטומטי כשהמשחק מופעל. במקום להשתמש ב-
GoogleSignInClient
של GoogleSignIn SDK כדי לבצע כניסה, אפשר להשתמש ב-GamesSignInClient.isAuthenticated()
כדי לאחזר את התוצאה של ניסיון הכניסה האוטומטית. - לא יהיה יותר צורך להעביר אובייקט
GoogleSignInAccount
למחלקות היצרן של הלקוח. לא ניתן לשלוח בקשה להיקפים נוספים של OAuth (בקשותGAMES_LITE
ו-SCOPE_APPFOLDER
יישלחו באופן אוטומטי). - אסימוני האימות ניתנים עכשיו באמצעות
GamesSignInClient.requestServerSideAccess()
ב-SDK של Play Games Services. - שיטת היציאה הוסרה, ולא יהיה יותר צורך בלחצן בתוך המשחק כדי להיכנס לחשבון או לצאת מ-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
, ההעברה של התרחיש לדוגמה צריכה להיות פשוטה.
הסר קריאות כניסה באמצעות 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(). } });
צריך להסיר את כל השיחות ליציאה, כי ניהול החשבון נמצא עכשיו בהגדרות של מערכת ההפעלה ושל אפליקציית Play Games.
אם השחקן הצליח להיכנס לחשבון, מסירים את לחצן הכניסה של Play Games מהמשחק. אם המשתמש יבחר שלא להיכנס לחשבון כשהמשחק יושק, אפשר לבחור להמשיך ולהציג לחצן עם הסמל של Play Games, ולהפעיל את תהליך ההתחברות באמצעות
GamesSignInClient.signIn()
.אחרי שמוודאים שהמשתמש מחובר, אפשר לאחזר את מזהה הנגן כדי לזהות את המשתמש.
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> { // Get PlayerID with mTask.getResult().getPlayerId() } );
מסירים את התלות ב-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