MeV2Response result값을 받아온 kakaoAccount에 {“profile_needs_agreement”:true,“has_email”:true,“email_needs_agreement”:true,“has_age_range”:true,“age_range_needs_agreement”:true,“has_birthday”:true,“birthday_needs_agreement”:true,“has_gender”:true,“gender_needs_agreement”:true}
디버깅을 해보니까 이렇게 동의 여부에 대한 정보만 들어가 있고 해당 계정 정보 안에 닉네임이나 이메일등은 전부 null로 뜹니다. 왜 그러는걸까요 ㅜㅜ 도와주세요
참고로 OptionalBoolean도 None으로 뜨는데 왜그런지 모르겠습니다 ㅜㅜ
<
public class LoginActivity extends AppCompatActivity {
private Button btn_custom_login;
private Button btn_custom_logout;
private SessionCallback sessionCallback = new SessionCallback();
Session session;
private String url;
private String name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btn_custom_login = (Button) findViewById(R.id.btn_custom_login);
btn_custom_logout = (Button) findViewById(R.id.btn_custom_logout);
//로그인 버튼
btn_custom_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
session = Session.getCurrentSession();
session.addCallback(sessionCallback);
session.open(AuthType.KAKAO_LOGIN_ALL, LoginActivity.this);
}
});
//로그아웃 버튼
btn_custom_logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserManagement.getInstance()
.requestLogout(new LogoutResponseCallback() {
@Override
public void onCompleteLogout() {
Toast.makeText(LoginActivity.this, "로그아웃 되었습니다.", Toast.LENGTH_SHORT).show();
}
});
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
// 세션 콜백 삭제
Session.getCurrentSession().removeCallback(sessionCallback);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
// 카카오톡|스토리 간편로그인 실행 결과를 받아서 SDK로 전달
if (Session.getCurrentSession().handleActivityResult(requestCode, resultCode, data)) {
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
protected void moveScreen(){
Intent intent=new Intent(LoginActivity.this, HomeActivity.class);
startActivity(intent); //액티비티 이름
}
//콜백 내부 클래스
private class SessionCallback implements ISessionCallback {
// 로그인에 성공한 상태
@Override
public void onSessionOpened() {
requestMe();
}
// 로그인에 실패한 상태
@Override
public void onSessionOpenFailed(KakaoException exception) {
Log.e("SessionCallback :: ", "onSessionOpenFailed : " + exception.getMessage());
}
// 사용자 정보 요청
public void requestMe() {
UserManagement.getInstance()
.me(new MeV2ResponseCallback() {
@Override
public void onSessionClosed(ErrorResult errorResult) {
Log.e("KAKAO_API", "세션이 닫혀 있음: " + errorResult);
}
@Override
public void onFailure(ErrorResult errorResult) {
Log.e("KAKAO_API", "사용자 정보 요청 실패: " + errorResult);
}
//사용자 정보 요청에 성공한 경우
@Override
public void onSuccess(MeV2Response result) {
Log.i("KAKAO_API", "사용자 아이디: " + result.getId());
UserAccount kakaoAccount = result.getKakaoAccount();
if (kakaoAccount != null) {
// 이메일
String email = kakaoAccount.getEmail();
if (email != null) {
Log.i("KAKAO_API", "email: " + email);
} else if (kakaoAccount.emailNeedsAgreement() == OptionalBoolean.TRUE) {
// 동의 요청 후 이메일 획득 가능
// 단, 선택 동의로 설정되어 있다면 서비스 이용 시나리오 상에서 반드시 필요한 경우에만 요청해야 합니다.
} else {
// 이메일 획득 불가
}
// 프로필
Profile profile = kakaoAccount.getProfile();
if (profile != null) {
Log.d("KAKAO_API", "nickname: " + profile.getNickname());
Log.d("KAKAO_API", "profile image: " + profile.getProfileImageUrl());
Log.d("KAKAO_API", "thumbnail image: " + profile.getThumbnailImageUrl());
url = profile.getProfileImageUrl();
name = profile.getNickname();
} else if (kakaoAccount.profileNeedsAgreement() == OptionalBoolean.TRUE) {
// 동의 요청 후 프로필 정보 획득 가능
} else {
// 프로필 획득 불가
}
redirectSignupActivity();
}
}
});
}
}/>