티스토리 뷰
[개발/Android] - 카카오 sdk v2 굳이 자바로 사용하기 -2 (카카오 링크 메시지)
카카오 sdk v2는 코틀린으로 가이드가 나와있습니다.
하지만 굳이, 아니면 어쩔 수 없이 자바로 해야되는 분들을 위해 자바로 사용하는 방법을 공유합니다.
sdk init, 앱 등록, 키발급 같은 내용은 생략합니다.
1. kotlin으로 카카오 로그인하기
- Login 코드
class KakaoLogin
{
interface IKLoginResult
{
fun onKakaoLoginResult(user: User?)
}
var user:User? = null
var listener:IKLoginResult? = null
// 로그인 callback 구성
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
Log.e("TAG", "로그인 실패", error)
if(listener != null)
listener!!.onKakaoLoginResult(null)
}
else if (token != null)
{
Log.i("TAG", "로그인 성공 ${token.accessToken}")
UserApiClient.instance.me { user, error ->
if (error != null)
{
Log.e("TAG", "사용자 정보 요청 실패", error)
}
else if (user != null)
{
Log.i("TAG", "사용자 정보 요청 성공" +
"\n회원번호: ${user.id}" +
"\n이메일: ${user.kakaoAccount?.email}" +
"\n닉네임: ${user.kakaoAccount?.profile?.nickname}" +
"\n프로필사진: ${user.kakaoAccount?.profile?.thumbnailImageUrl}")
this.user = user
if(listener != null)
listener!!.onKakaoLoginResult(user)
}
}
}
}
fun login(context: Context)
{
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (LoginClient.instance.isKakaoTalkLoginAvailable(context))
LoginClient.instance.loginWithKakaoTalk(context, callback = callback)
else
LoginClient.instance.loginWithKakaoAccount(context, callback = callback)
}
//로그아웃
fun onLink() {
UserApiClient.instance.unlink { error ->
if (error != null) {
Log.e("TAG", "연결 끊기 실패", error)
}
else {
Log.i("TAG", "연결 끊기 성공. SDK에서 토큰 삭제 됨")
}
}
}
companion object {
@JvmStatic
val instance by lazy { KakaoLogin() }
}
}
- activity 코드
class TestKakaoActivityKotlin : AppCompatActivity(), KakaoLogin.IKLoginResult {
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
setContentView(R.layout.activity_main)
kakaoLogin()
}
private fun kakaoLogin() {
KakaoLogin.instance.listener = this
KakaoLogin.instance.login(this)
}
override fun onKakaoLoginResult(user: User?) {
//콜백메서드
}
}
2. Java로 카카오 로그인하기
- Login 코드
public class TestKakaoLogin {
interface IKLoginResult{
void onKakaoLoginResult(User user);
}
private static TestKakaoLogin testKakaoLogin = new TestKakaoLogin();
IKLoginResult listener;
public void setListener(IKLoginResult listener){
this.listener = listener;
}
public static TestKakaoLogin getInstance() {
return testKakaoLogin;
}
private TestKakaoLogin() {
if (testKakaoLogin != null)
throw new AssertionError();
}
private Function2<OAuthToken, Throwable, Unit> callback = new Function2<OAuthToken, Throwable, Unit> () {
@Override
public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {
if (throwable != null) {
Log.e("error",throwable.getLocalizedMessage());
} else if (oAuthToken != null) {
Log.i("success", "로그인 성공");
UserApiClient.getInstance().me(new Function2<User, Throwable, Unit>() {
@Override
public Unit invoke(User user, Throwable throwable) {
if (user != null) {
listener.onKakaoLoginResult(user);
}
return null;
}
});
}
return null;
}
};
public void login(Context context) {
if (LoginClient.getInstance().isKakaoTalkLoginAvailable(context)) {
LoginClient.getInstance().loginWithKakaoTalk(context, callback);
}
}
}
- activity 코드
public class TestKakaoActivity extends AppCompatActivity implements TestKakaoLogin.IKLoginResult {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
kakaoLogin();
}
private void kakaoLogin() {
TestKakaoLogin.getInstance().setListener(this);
TestKakaoLogin.getInstance().login(this);
}
@Override
public void onKakaoLoginResult(User user) {
//콜백메서드
}
}
반응형
'개발 > Android' 카테고리의 다른 글
카카오 sdk v2 굳이 자바로 사용하기 -2 (카카오 링크 메시지) (1) | 2021.02.20 |
---|
댓글