Play 게임즈 서비스 로그인 v2로 이전

이 페이지에서는 Play 게임즈 서비스 v1에서 v2로 클라이언트 코드를 이전하는 방법을 설명합니다.

로그인 성공률을 높이기 위해 새 SDK에는 다음 4가지 주요 변경사항이 포함되었습니다. 개발자는 이러한 사항을 알아두어야 합니다.

  1. 게임 시작 시 로그인이 자동으로 트리거됩니다. GoogleSignIn SDK의 GoogleSignInClient를 사용하여 로그인을 실행하는 대신 GamesSignInClient.isAuthenticated()를 사용하여 자동 로그인 시도 결과를 가져올 수 있습니다.
  2. 클라이언트 팩토리 클래스에는 더 이상 GoogleSignInAccount 객체를 전달할 필요가 없습니다. 추가 OAuth 범위는 요청할 수 없습니다 (GAMES_LITESCOPE_APPFOLDER가 자동으로 요청됨).
  3. 이제 Play 게임즈 서비스 SDK 내에서 인증 토큰이 GamesSignInClient.requestServerSideAccess()를 통해 제공됩니다.
  4. 로그아웃 메서드가 삭제되었으며, 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);
}

로그인 및 로그아웃 호출 삭제

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. 이제 계정 관리가 OS 및 Play 게임즈 앱 설정에 포함되므로 모든 로그아웃 호출을 삭제합니다.

  3. 플레이어가 로그인되었다면 게임에서 Play 게임즈 로그인 버튼을 삭제합니다. 사용자가 게임이 시작될 때 로그인하지 않도록 선택하는 경우, 개발자는 Play 게임즈 아이콘이 있는 버튼을 계속 표시하고 GamesSignInClient.signIn()으로 로그인 프로세스를 트리거하도록 선택할 수 있습니다.

  4. 사용자가 로그인되어 있는지 확인한 후에는 플레이어 ID를 가져와 사용자를 식별할 수 있습니다.

    PlayGames.getPlayersClient(activity).getCurrentPlayer().addOnCompleteListener(mTask -> {
        // Get PlayerID with mTask.getResult().getPlayerId()
      }
    );
    
  5. 더 이상 사용되지 않는 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 via 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