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

이 가이드에서는 Play 게임즈 서비스에서 클라이언트 코드를 이전하는 방법을 설명합니다. v1에서 v2로 변경되었습니다.

새 SDK에는 로그인 성공을 높이기 위한 다음 4가지 주요 변경사항이 있습니다. 이러한 사항은 개발자가 인지하고 있어야 합니다.

  1. 게임 시작 시 로그인이 자동으로 트리거됩니다. 대신 GoogleSignIn SDK의 GoogleSignInClient를 사용하여 로그인을 실행하려면 다음을 사용할 수 있습니다. GamesSignInClient.isAuthenticated(): 자동 로그인 시도가 있었습니다.
  2. 클라이언트 팩토리 클래스에는 더 이상 GoogleSignInAccount 객체를 전달할 필요가 없습니다. 추가 OAuth 범위는 요청할 수 없습니다 (GAMES_LITE에서 자동으로 요청됨).
  3. 인증 토큰은 이제 다음을 사용하여 제공됩니다. Play 게임즈 서비스 내 GamesSignInClient.requestServerSideAccess() 사용할 수 있습니다
  4. 로그아웃 메서드가 삭제되었으며, 더 이상 인게임이 필요하지 않습니다. Play 게임즈 서비스에 로그인 또는 로그아웃하는 버튼

또한 자동 로그인 때문에 게임에서 로그인해야 합니다. 따라서 할당량 관리를 통해 게임이 할당량 한도 내에서 로그인 요청 할당량을 지정합니다

새 SDK Maven 저장소 타겟팅

Gradle 빌드 시스템을 사용하는 경우 이 작업을 수행하려면 com.google.android.gms:play-services-games-v2:+ 아티팩트의 종속 항목을 모듈의 build.gradle 파일 예를 들면 다음과 같습니다.

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);
}

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

추가 범위를 지정하지 않은 경우 사용 사례 이전은 간단합니다.

  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 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