Google ID 서비스 (GIS)는 새로운 API 세트로, 사용자는 이를 통해 보다 쉽게 구현할 수 있는 개발자용 패키지로 안전하게 로그인 및 가입할 수 있습니다. 이 문서에서는 사용자가 'Google 계정으로 로그인'을 탭하면 로그인 또는 가입 절차가 시작됩니다. 버튼을 클릭합니다. 이 API는 로그인 흐름을 간소화할 수 있습니다.
사용자가 로그인 인텐트를 명시적으로 표시하는 경우에만 이 API를 사용해야 합니다. Google과 함께하세요. 예를 들어 사용자가 로그인 페이지에서 'Google 계정으로 로그인'을 클릭할 때 버튼을 클릭합니다.
이 API를 사용하여 사용자에게 앱 실행 또는 앱 실행 시 로그인하라는 메시지를 표시해서는 안 됩니다. 다른 트리거에 대한 응답으로 생성했는지 확인할 수 있습니다 대상 이러한 사용 사례를 원탭 로그인 및 가입
새 API로 Google 로그인 과정을 시작하면 UI:
시작하기 전에
Google API 콘솔 프로젝트 구성 및 Android 스튜디오 프로젝트 설정
로그인 요청
Identity API를 사용하여 Google 로그인 흐름을 시작하려면
GetSignInRequest
객체. 그런 다음 SignInClient
객체 호출에서
getSignInIntent
입니다. 이 호출은 비동기식이며 성공 시
PendingIntent
: 대화상자를 실행합니다.
private static final int REQUEST_CODE_GOOGLE_SIGN_IN = 1; /* unique request id */
private void signIn() {
GetSignInIntentRequest request =
GetSignInIntentRequest.builder()
.setServerClientId(getString(R.string.server_client_id))
.build();
Identity.getSignInClient(activity)
.getSignInIntent(request)
.addOnSuccessListener(
result -> {
try {
startIntentSenderForResult(
result.getIntentSender(),
REQUEST_CODE_GOOGLE_SIGN_IN,
/* fillInIntent= */ null,
/* flagsMask= */ 0,
/* flagsValue= */ 0,
/* extraFlags= */ 0,
/* options= */ null);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Google Sign-in failed");
}
})
.addOnFailureListener(
e -> {
Log.e(TAG, "Google Sign-in failed", e);
});
}
로그인 결과 처리
onActivityResult
에서 SignInCredential
를 가져옵니다. SignInCredential
getSignInCredentialFromIntent
에서 반환된 객체에는
정보를 제공할 수 있습니다. 어떤 이유로든 사용자가 로그인하지 못하면
ApiException
이 발생합니다.
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK) {
if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
try {
SignInCredential credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(data);
// Signed in successfully - show authenticated UI
updateUI(credential);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
}
}
}
}
private ActivityResultLauncher<IntentSenderRequest> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
// handle intent result here
});
성공적으로 로그인하면 항상 사용자의 성명, 이메일, 및 프로필 사진 URL입니다. 추가 정보가 필요한 경우 사용자를 완전한 프로필 정보 흐름으로 통합할 수 있습니다.