카카오 로그인api 관련

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;
        });
    }
}

감사합니다. 체크해보겠습니다.