앱 환경에서 카카오 로그인 첫 시도시
카톡 로그인 되어있는 경우든 로그인 안되어있어서 새로뜬 로그인페이지에서 로그인 하든 accessToken이 빈값으로 옵니다.
한번 오류나고 나면 다음 시도때는 정상적으로 accessToken이 받아지고요.
왜 이런현상이 일어나는지 모르겠어요.
아래는 native환경 카카오로그인 구현부입니다.
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import com.enrsoft.gogiya.wvApp.R;
import com.kakao.auth.ApiResponseCallback;
import com.kakao.auth.AuthService;
import com.kakao.auth.AuthType;
import com.kakao.auth.ISessionCallback;
import com.kakao.auth.Session;
import com.kakao.auth.network.response.AccessTokenInfoResponse;
import com.kakao.network.ErrorResult;
import com.kakao.util.exception.KakaoException;
import com.kakao.util.helper.log.Logger;
public class KakaoLoginServiceImpl implements LoginService, ISessionCallback {
private Context context;
private String accessToken = “”;
public KakaoLoginServiceImpl(Context context) {
this.context = context;
Session.getCurrentSession().addCallback(this);
}
@Override
public void login() {
Session.getCurrentSession().open(AuthType.KAKAO_TALK, (Activity) context);
Toast.makeText(context, context.getString(R.string.webview_login_kakao), Toast.LENGTH_SHORT).show();
}
private void reqAccessToken(){
AuthService.getInstance().requestAccessTokenInfo(new ApiResponseCallback<AccessTokenInfoResponse>() {
@Override
public void onSessionClosed(ErrorResult errorResult) {
Log.e("kakao", errorResult.getErrorMessage());
}
@Override
public void onNotSignedUp() {
}
@Override
public void onSuccess(AccessTokenInfoResponse result) {
long userId = result.getUserId();
Logger.d("this access token is for userId=" + userId);
long expiresInMilis = result.getExpiresInMillis();
Logger.d("this access token expires after " + expiresInMilis + " milliseconds.");
Session.getCurrentSession().getAccessToken();
}
});
}
@Override
public void onSessionOpened() {
reqAccessToken();
accessToken = Session.getCurrentSession().getAccessToken();
}
@Override
public void onSessionOpenFailed(KakaoException exception) {
Log.e("kakao", exception.getMessage());
if(exception != null) {
Logger.e(exception);
}
}
@Override
public String getAccessToken() {
return this.accessToken;
}
}
아래는 javascript에서 native호출을 위해 구현된 부분입니다.
@JavascriptInterface
public String tryKakaoLogin() {
LoginService loginService = Login.loginService(context, LoginType.KAKAO);
// 카카오 인스턴스 초기화
loginService.login();
String accessToken = loginService.getAccessToken();
return accessToken;
}
javascript단에 accessToken만 잘 들어오면 정상작동합니다.
중간에 받은 프로젝트이고 안드로이드에 경험이 적다보니 혼자해결하기 힘들어서 올립니다.
추가적으로 필요한 정보 있으시면 알려주세요.