Android 게임에서 로그인

Google Play 게임즈 서비스 기능에 액세스하려면 게임에서 반환합니다. 플레이어가 인증되지 않은 경우 게임에서 오류가 발생할 수 있습니다. Google Play 게임즈 서비스 API를 호출할 때 이 문서에서는 게임에서 원활한 로그인 환경을 구현하는 방법을 설명합니다.

플레이어 로그인 구현

GoogleSignInClient 클래스는 현재 로그인한 적이 없는 경우 로그인해야 합니다. 있습니다.

로그인 클라이언트를 만들려면 다음 단계를 따르세요.

  1. 다음을 통해 로그인 클라이언트를 만듭니다. GoogleSignInOptions 객체에 설정해야 합니다. GoogleSignInOptions.Builder 로그인을 구성하려면 GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN

    GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
  2. kubectl 명령어 SnapshotsClient님, 그런 다음 .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)을(를) GoogleSignInOptions.Builder 다음 코드 스니펫과 같습니다.

    GoogleSignInOptions  signInOptions =
        new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN)
            .requestScopes(Games.SCOPE_GAMES_SNAPSHOTS)
            .build();
  3. GoogleSignIn.getClient() 메서드를 호출하고 이전 단계에서 구성한 옵션에 적용됩니다. 통화가 다음과 같은 경우 성공하면 Google Sign-In API가 GoogleSignInClient

플레이어가 이미 로그인되어 있는지 확인

계정이 이미 로그인되어 있는지 확인할 수 있습니다. 현재 기기에서 GoogleSignIn.getLastSignedInAccount() 사용 GoogleSignIn.hasPermissions() 두 조건이 모두 true이면, 즉 getLastSignedInAccount()는 null이 아닌 값이고 hasPermissions()true를 반환합니다. 기기가 다음과 같은 경우에도 getLastSignedInAccount()에서 반환된 계정 있습니다.

자동 로그인 실행

silentSignIn()를 호출하여 현재 로그인된 플레이어의 계정을 가져올 수 있습니다. 로그인이 필요한 경우 사용자 인터페이스를 표시하지 않고 다른 기기에서 앱에 로그인되었습니다.

silentSignIn() 메서드는 Task<GoogleSignInAccount>를 반환합니다. 태스크가 완료되면 앞서 선언한 GoogleSignInAccount 필드를 작업이 수행된 로그인 계정으로 설정 결과로 또는 로그인한 사용자가 없음을 나타내는 null로 반환됩니다.

자동 로그인 시도가 실패하면 선택적으로 로그인 인텐트를 전송하여 로그인 사용자 인터페이스에 설명한 다음 대화형 로그인 수행

로그인한 플레이어의 상태는 활동이 포그라운드에 있지 않을 때 변경될 수 있으므로, 활동의 silentSignIn() 호출을 추천 onResume() 메서드를 사용하여 축소하도록 요청합니다.

자동으로 로그인을 수행하려면 다음 단계를 따르세요.

  1. GoogleSignInClient에서 silentSignIn() 메서드를 호출하여 자동 로그인 과정을 시작합니다. 이 호출은 다음과 같은 경우 GoogleSignInAccount가 포함된 Task<GoogleSignInAccount> 객체를 반환합니다. 자동으로 로그인되었는지 확인합니다.
  2. 다음을 재정의하여 플레이어 로그인의 성공 또는 실패를 처리합니다. OnCompleteListener
    • 로그인 작업이 성공하면 GoogleSignInAccount를 가져옵니다. getResult()를 호출하여 객체를 업데이트할 수 있습니다.
    • 로그인에 실패한 경우 로그인 인텐트를 전송하여 대화형 로그인 과정을 시작할 수 있습니다. 사용할 수 있는 추가 콜백 리스너의 목록은 Tasks API 개발자 가이드Task API 참조 문서입니다.

다음 코드 스니펫은 앱에서 자동 로그인을 실행하는 방법을 보여줍니다.

private void signInSilently() {
  GoogleSignInOptions signInOptions = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
  GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
  if (GoogleSignIn.hasPermissions(account, signInOptions.getScopeArray())) {
    // Already signed in.
    // The signed in account is stored in the 'account' variable.
    GoogleSignInAccount signedInAccount = account;
  } else {
    // Haven't been signed-in before. Try the silent sign-in first.
    GoogleSignInClient signInClient = GoogleSignIn.getClient(this, signInOptions);
    signInClient
        .silentSignIn()
        .addOnCompleteListener(
            this,
            new OnCompleteListener<GoogleSignInAccount>() {
              @Override
              public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
                if (task.isSuccessful()) {
                  // The signed in account is stored in the task's result.
                  GoogleSignInAccount signedInAccount = task.getResult();
                } else {
                  // Player will need to sign-in explicitly using via UI.
                  // See [sign-in best practices](http://developers.google.com/games/services/checklist) for guidance on how and when to implement Interactive Sign-in,
                  // and [Performing Interactive Sign-in](http://developers.google.com/games/services/android/signin#performing_interactive_sign-in) for details on how to implement
                  // Interactive Sign-in.
                }
              }
            });
  }
}

@Override
protected void onResume() {
  super.onResume();
  signInSilently();
}

자동 로그인 시도가 실패하면 다음을 호출할 수 있습니다. getException()(으)로 ApiException 가져오기 자세한 상태 코드로 교체할 수 있습니다. 상태 코드 CommonStatusCodes.SIGN_IN_REQUIRED 플레이어가 로그인하려면 명시적인 조치를 취해야 함을 나타냅니다. 이 경우 앱은 대화형 로그인 흐름을 시작할 수 있습니다.

대화형 로그인 실행

플레이어 상호작용으로 로그인하려면 앱에서 로그인 인텐트를 실행해야 합니다. 성공하면 Google Sign-In API는 플레이어에게 사용자 인증 정보를 입력하라는 사용자 인터페이스를 표시합니다. 로그인하세요. 이 접근 방식을 사용하면 로그인 활동이 처리되도록 하므로 앱 개발이 간소화됩니다. Google Play 서비스를 업데이트해야 하거나 동의 메시지를 표시해야 하는 경우와 같이 있습니다. 결과는 onActivityResult 있습니다.

대화형으로 로그인을 수행하려면 다음 단계를 따르세요.

  1. GoogleSignInClient에서 getSigninIntent()를 호출하여 로그인 인텐트를 가져온 다음 다음을 호출합니다. startActivity() 해당 인텐트를 전달합니다. 다음 코드 스니펫은 앱이 대화형 로그인 흐름을 시작합니다.

    private void startSignInIntent() {
      GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
          GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
      Intent intent = signInClient.getSignInIntent();
      startActivityForResult(intent, RC_SIGN_IN);
    }
  2. onActivityResult() 콜백에서 반환되고 반환된 인텐트의 결과를 처리합니다.

    • 로그인 결과가 성공적이면 GoogleSignInResultGoogleSignInAccount 객체
    • 로그인 결과가 실패했다면 로그인 오류를 처리해야 합니다 (예: 알림에 오류 메시지 표시). 다음 코드 스니펫은 앱이 플레이어 로그인 결과를 처리하는 방법을 보여줍니다.
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
          // The signed in account is stored in the result.
          GoogleSignInAccount signedInAccount = result.getSignInAccount();
        } else {
          String message = result.getStatus().getStatusMessage();
          if (message == null || message.isEmpty()) {
            message = getString(R.string.signin_other_error);
          }
          new AlertDialog.Builder(this).setMessage(message)
              .setNeutralButton(android.R.string.ok, null).show();
        }
      }
    }

플레이어 정보 검색

Google Sign-In API가 반환하는 GoogleSignInAccount에 플레이어가 포함되어 있지 않습니다. 확인할 수 있습니다 게임에서 플레이어의 표시 이름, 플레이어 ID와 같은 플레이어 정보를 사용하는 경우 다음 단계에 따라 이 정보를 검색할 수 있습니다.

  1. getPlayersClient() 메서드를 호출하고 다음을 전달하여 PlayersClient 객체를 가져옵니다. GoogleSignInAccount를 매개변수로 사용합니다.
  2. PlayersClient 메서드를 사용하여 Player를 비동기식으로 로드합니다. 플레이어의 정보가 포함된 객체를 반환합니다. 예를 들어 getCurrentPlayer()를 호출할 수 있습니다. 를 호출하여 현재 로그인된 플레이어를 로드합니다. 태스크가 상태 코드가 포함된 ApiException /SIGN_IN_REQUIRED, 이는 플레이어를 다시 인증해야 함을 나타냅니다. 이렇게 하려면 다음을 호출합니다. GoogleSignInClient.getSignInIntent() 플레이어가 대화형으로 로그인할 수 있습니다
  3. 작업이 Player 객체를 성공적으로 반환하면 Player 객체를 사용하여 특정 플레이어 세부정보 (예: getDisplayName() 또는 getPlayerId()입니다.

로그인 버튼 제공

게임에서 표준 Google 로그인 버튼을 제공하려면 두 가지 방법이 있습니다.

사용자가 로그인 버튼을 클릭하면 게임에서 로그인 흐름을 시작하기 위해 대화형 로그인 수행에 설명된 대로 로그인 인텐트를 선택합니다.

이 코드 스니펫은 onCreate()에 로그인 버튼을 추가하는 방법을 보여줍니다. 메서드를 사용하세요.

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_sign_in);
  findViewById(R.id.sign_in_button).setOnClickListener(this);
  findViewById(R.id.sign_out_button).setOnClickListener(this);
}

다음 코드 스니펫은 사용자가 로그인 버튼을 클릭합니다.

@Override
public void onClick(View view) {
  if (view.getId() == R.id.sign_in_button) {
    // start the asynchronous sign in flow
    startSignInIntent();
  } else if (view.getId() == R.id.sign_out_button) {
    // sign out.
    signOut();
    // show sign-in button, hide the sign-out button
    findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
    findViewById(R.id.sign_out_button).setVisibility(View.GONE);
  }
}

게임 팝업 표시

GamesClient 클래스를 사용하여 게임에 팝업 뷰를 표시할 수 있습니다. 예를 들어 '환영합니다' 또는 '업적 달성' 팝업을 표시할 수 있습니다. Google Play 게임즈 서비스를 허용하려면 다음 단계를 따르세요. 를 호출하려면 setViewForPopups() 메서드를 사용하여 축소하도록 요청합니다. 다음을 호출하여 화면에 팝업이 표시되는 위치를 추가로 맞춤설정할 수 있습니다. setGravityForPopups()

플레이어 로그아웃

로그아웃은 GoogleSignInClient에서 signOut() 메서드를 호출하여 실행됩니다.

private void signOut() {
  GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
      GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN);
  signInClient.signOut().addOnCompleteListener(this,
      new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
          // at this point, the user is signed out.
        }
      });
}