이 가이드에서는 Play 게임즈 서비스 v1에서 v2로 클라이언트 코드를 이전하는 방법을 설명합니다.
새 SDK에는 로그인 성공을 높이기 위한 다음 4가지 주요 변경사항이 있습니다. 이러한 사항은 개발자가 인지하고 있어야 합니다.
- 게임 시작 시 로그인이 자동으로 트리거됩니다.
GoogleSignIn
SDK의GoogleSignInClient
를 사용하여 로그인을 실행하는 대신GamesSignInClient.isAuthenticated()
를 사용하여 자동 로그인 시도 결과를 가져올 수 있습니다. - 클라이언트 팩토리 클래스에는 더 이상
GoogleSignInAccount
객체를 전달할 필요가 없습니다. 추가 OAuth 범위는 요청할 수 없습니다 (GAMES_LITE
가 자동으로 요청됨). - 이제 Play 게임즈 서비스 SDK 내에서 인증 토큰이
GamesSignInClient.requestServerSideAccess()
를 통해 제공됩니다. - 로그아웃 방법이 삭제되었으며, Play 게임즈 서비스에 로그인하거나 로그아웃할 때 더 이상 게임 내 버튼이 필요하지 않습니다.
또한 게임이 시작될 때의 자동 로그인으로 인해 게임에서 추가 로그인이 발생합니다. 따라서 할당량 관리를 검토하여 게임이 로그인 요청 할당량을 초과하지 않도록 해야 합니다.
새 SDK Maven 저장소 타겟팅
Gradle 빌드 시스템을 사용하는 경우 모듈의 build.gradle
파일에 있는 com.google.android.gms:play-services-games-v2:+
아티팩트의 종속 항목을 변경하면 됩니다. 예를 들면 다음과 같습니다.
dependencies {
implementation "com.google.android.gms:play-services-games-v2:+"
}
SDK 초기화
Application
클래스의 onCreate(..)
콜백에서 Play 게임즈 SDK를 초기화합니다. 예를 들면 다음과 같습니다.
import com.google.android.gms.games.PlayGamesSdk;
...
@Override
public void onCreate(){
super.onCreate();
PlayGamesSdk.initialize(this);
}
로그인 및 로그아웃 호출 삭제
추가 범위를 지정하지 않은 경우 사용 사례 이전은 간단합니다.
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(). } });
이제 계정 관리가 OS 및 Play 게임즈 앱 설정에 포함되므로 모든 로그아웃 호출을 삭제합니다.
플레이어가 로그인되었다면 게임에서 Play 게임즈 로그인 버튼을 삭제합니다. 사용자가 게임이 시작될 때 로그인하지 않도록 선택하는 경우, 개발자는 Play 게임즈 아이콘이 있는 버튼을 계속 표시하고
GamesSignInClient.signIn()
으로 로그인 프로세스를 트리거하도록 선택할 수 있습니다.사용자가 로그인되어 있는지 확인한 후에는 플레이어 ID를 가져와 사용자를 식별할 수 있습니다.
PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> { // Get PlayerID with mTask.getResult().getPlayerId() } );
더 이상 사용되지 않는
GoogleSignIn
API 종속 항목을 삭제합니다.
클라이언트 클래스 이름 업데이트
클라이언트(예: LeaderboardsClient
또는 AchievementsClient
)를 만들 때는 Games.getFooClient()
대신 PlayGames.getFooClient()
를 사용합니다.
서버 측 액세스 요청
서버 측 액세스를 요청할 때는 GoogleSignInAccount.getServerAuthCode()
대신 GamesSignInClient.requestServerSideAccess()
를 사용합니다.
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.
}
});
추가 범위 삭제
Play 게임즈 서비스 v2에서는 추가 범위를 요청할 수 없습니다. 그래도 추가 범위를 요청해야 하는 경우 Play 게임즈 서비스와 함께 Google 로그인 SDK를 사용하는 것이 좋습니다.
GoogleApiClient에서 이전
이전 통합의 경우 게임이 Play 게임즈 서비스 SDK의 GoogleApiClient API 변형에 종속되어 있을 수 있습니다. 이는 2017년 말 지원 중단되었으며 '연결 없는' 클라이언트로 대체되었습니다. 이전하려면 GoogleApiClient
클래스를 그에 대응하는 '연결 없는' 클래스로 대체하면 됩니다. 그런 다음 이 페이지의 안내에 따라 게임을 v1에서 v2로 이전해야 합니다.
다음은 공통 클래스의 매핑입니다.
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