SDK 버전 정보 : implementation “com.kakao.sdk:v2-user:2.14.0”
안드로이드 버전 정보 : API 26
카카오톡이 기기에 설치가 안 되어있을 경우에는 브라우저가 열리고 로그인기능이 제대로 작동하는데 , 그 반대로 기기에 설치가 되어 있을 경우에는 아무것도 켜지지않고 먹통입니다 … 혹시 더 추가로 설정해야 할게 있는지 궁금합니다. 에러코드는 아무것도 뜨지 않습니다.
SDK 버전 정보 : implementation “com.kakao.sdk:v2-user:2.14.0”
안드로이드 버전 정보 : API 26
카카오톡이 기기에 설치가 안 되어있을 경우에는 브라우저가 열리고 로그인기능이 제대로 작동하는데 , 그 반대로 기기에 설치가 되어 있을 경우에는 아무것도 켜지지않고 먹통입니다 … 혹시 더 추가로 설정해야 할게 있는지 궁금합니다. 에러코드는 아무것도 뜨지 않습니다.
안녕하세요
구현하신 로그인 코드와 앱 id 첨부 부탁드리겠습니다.
App Id : 923509
Function2<OAuthToken, Throwable, Unit> callback = new Function2<OAuthToken, Throwable, Unit>() {
@Override
public Unit invoke(OAuthToken oAuthToken, Throwable throwable) {
// 이때 토큰이 전달이 되면 로그인이 성공한 것이고 토큰이 전달되지 않았다면 로그인 실패
if(oAuthToken != null) {
}
if (throwable != null) {
}
updateKakaoLoginUi();
return null;
}
@JavascriptInterface
public void kakaologin(){
//UserApiClient.getInstance().loginWithKakaoAccount(MainActivity.this, callback);
if(UserApiClient.getInstance().isKakaoTalkLoginAvailable(MainActivity.this)) {
UserApiClient.getInstance().loginWithKakaoTalk(MainActivity.this, callback);
}else {
UserApiClient.getInstance().loginWithKakaoAccount(MainActivity.this, callback);
}
}
private void updateKakaoLoginUi(){
UserApiClient.getInstance().me(new Function2<User, Throwable, Unit>() {
@Override
public Unit invoke(User user, Throwable throwable) {
// 로그인이 되어있으면
if (user!=null){
// 로그인 function
// 유저의 아이디
Log.d(TAG,"invoke: id" + user.getId());
// 유저의 어카운트정보에 이메일
Log.d(TAG,"invoke: nickname" + user.getKakaoAccount().getEmail());
// 유저의 어카운트 정보의 프로파일에 닉네임
Log.d(TAG,"invoke: email" + user.getKakaoAccount().getProfile().getNickname());
// 유저의 어카운트 파일의 성별
Log.d(TAG,"invoke: gerder" + user.getKakaoAccount().getGender());
// 유저의 어카운트 정보에 나이
Log.d(TAG,"invoke: age" + user.getKakaoAccount().getAgeRange());
}else {
// 로그아웃 function
}
return null;
}
});
}
하이브리드앱이라서, html 영역에서 kakaologin 메서드를 호출시켰습니다. 나머진 특별한건없습니다.
보내주신 코드에 로그 추가한 것 외에는 수정하지 않고 아래의 코드로 간단하게 테스트를 진행해보았는데요, 정상적으로 동작하는 것 확인해서 정확히 어떻게 구현하셨는지는 알 수 없지만 SDK 코드 상의 이슈는 아닌 것으로 보입니다.
이슈와 별개로 하이브리드 앱을 개발하고 계시다면 안드로이드용 SDK를 사용하시기보다는 자바스크립트용 SDK를 사용하시기를 권장하고 있습니다. 가이드 확인해보시고 자바스크립트용 SDK 사용하시는 것이 좋을 것 같습니다.
public class MainActivity extends AppCompatActivity {
public static String TAG = "LoginTest";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
KakaoSdk.init(this, "app_key");
WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
String html = "<!DOCTYPE html>\n" +
"<html lang=\"en\">\n" +
"<head>\n" +
" <meta charset=\"UTF-8\">\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" +
" <title>Document</title>\n" +
"</head>\n" +
"<body>\n" +
" <input type=\"button\" value=\"Say hello\" onClick=\"login()\" />\n" +
"\n" +
" <script type=\"text/javascript\">\n" +
" function login() {\n" +
" Kakao.kakaologin();\n" +
" }\n" +
"</script>\n" +
"</body>\n" +
"</html>";
webView.addJavascriptInterface(this, "Kakao");
WebView.setWebContentsDebuggingEnabled(true);
webView.loadData(html, "text/html; charset=utf-8", "UTF-8");
}
Function2<OAuthToken, Throwable, Unit> callback = (oAuthToken, throwable) -> {
// 이때 토큰이 전달이 되면 로그인이 성공한 것이고 토큰이 전달되지 않았다면 로그인 실패
if (oAuthToken != null) {
Log.d(TAG, oAuthToken.toString());
} else if (throwable != null) {
Log.d(TAG, throwable.toString());
}
updateKakaoLoginUi();
return null;
};
@JavascriptInterface
public void kakaologin() {
//UserApiClient.getInstance().loginWithKakaoAccount(MainActivity.this, callback);
if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(MainActivity.this)) {
UserApiClient.getInstance().loginWithKakaoTalk(MainActivity.this, callback);
} else {
UserApiClient.getInstance().loginWithKakaoAccount(MainActivity.this, callback);
}
}
private void updateKakaoLoginUi() {
UserApiClient.getInstance().me((user, throwable) -> {
// 로그인이 되어있으면
if (user != null) {
// 로그인 function
// 유저의 아이디
Log.d(TAG, "invoke: id" + user.getId());
// 유저의 어카운트정보에 이메일
Log.d(TAG, "invoke: nickname" + user.getKakaoAccount().getEmail());
// 유저의 어카운트 정보의 프로파일에 닉네임
Log.d(TAG, "invoke: email" + user.getKakaoAccount().getProfile().getNickname());
// 유저의 어카운트 파일의 성별
Log.d(TAG, "invoke: gerder" + user.getKakaoAccount().getGender());
// 유저의 어카운트 정보에 나이
Log.d(TAG, "invoke: age" + user.getKakaoAccount().getAgeRange());
} else {
// 로그아웃 function
}
return null;
});
}
}
감사합니다. 체크해보겠습니다.