카카오 로그인 질문이요

웹뷰로 진행중인데 인증번호받는부분 까지 되는데 빈페이지로 넘어갑니다…
로그에는 Cannot read property ‘getKakaoAgent’ of undefined" 이 찍혔습니다

@anon75255842
웹뷰에서 Javascript SDK 로 로그인하실 경우 웹뷰에 추가 개발이 필요합니다.

하이브리드 앱에 적용하기: https://developers.kakao.com/docs/latest/ko/getting-started/sdk-js#hybrid-app

나머지 서비스 로직구현에는 어떤 로직을 넣는건가요??

지금 올려준 url 참고해서 해봤는데요…
https://kauth.kakao.com/oauth/authorize?redirect_uri=kakaojs&response_type=code&state=9pb78dm5lg60zmpq9k72&proxy=easyXDM_Kakao_o1js26dyu1g_provider&ka=sdk%2F1.39.1 os%2Fjavascript lang%2Fko-KR device%2FLinux_armv8l origin%2Ffile%253A%252F%252F&origin=file%3A%2F%2F&client_id=클라이언트아이디

새로운 웹 창이 열리면서 로그인 하고 저 주소에서 빈페이지로 멈춰있습니다 어떤걸 또 구현해야하는거죠??

클래스 코드입니다.

    webView.setWebViewClient(new WebViewClient(){
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            Log.d("TAG", request.getUrl().toString());
            Log.d("TAG", request.getUrl().getScheme());

            if (request.getUrl().getScheme().equals("https")){
                try {
                    // Intent 생성
                    Intent intent = Intent.parseUri(request.getUrl().toString(), Intent.URI_INTENT_SCHEME);

                    // 실행 가능한 앱이 있으면 앱 실행
                    if (intent.resolveActivity(getPackageManager()) != null) {
                        startActivity(intent);
                        Log.d("TAG", "ACTIVITY: ${intent.`package`}");
                        return true;
                    }

                    // Fallback URL이 있으면 현재 웹뷰에 로딩
                    String fallbackUrl = intent.getStringExtra("browser_fallback_url");
                    if (fallbackUrl != null) {
                        view.loadUrl(fallbackUrl);
                        Log.d("TAG", "FALLBACK: $fallbackUrl");
                        return true;
                    }

                    Log.e("TAG", "Could not parse anythings");
                } catch (URISyntaxException e) {
                    e.printStackTrace();
                    Log.e("TAG", "Invalid intent request", e);
                }
            }

            // 나머지 서비스 로직 구현
            return false;
        }
    });

나머지 서비스 로직 구현에 intent이동을 넣어도 이동이안되는데 어떤 로직을 넣는거죠??

Intent intent = new Intent(getApplicationContext(),IndexActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

팝업 웹 띄우기도 구현을 해야 작동이 되는건가요?

1개의 좋아요

@anon75255842
흰화면에서 멈췄다면 팝업 문제일 확률이 높습니다.

"나머지 서비스 로직 구현"이라는 것은 shouldOverrideUrlLoading 메소드를 3rd 앱과 SDK가 공유해야만 하는 구조적 문제 때문에 3rd 앱의 로직과 간섭을 피하기 위해 적어둔 주석입니다. shouldOverrideUrlLoading 메소드에 작성하실 내용이 없다면 무시하시면 됩니다.

팝업 문제일경우 어떤처리를 해주어야 할까요?

@anon75255842
팝업이 동작하기만 하면 됩니다. 위에 소개해드린 가이드를 참고하시면 됩니다.

팝업처리 까지 구현을 했습니다…

webView.setWebChromeClient(new WebChromeClient() {

        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            // 웹뷰 만들기
            WebView childWebView = new WebView(webView.getContext());
            WebSettings childWebSetting = childWebView.getSettings();
            childWebSetting.setJavaScriptEnabled(true);
            childWebSetting.setJavaScriptCanOpenWindowsAutomatically(true);
            childWebSetting.setSupportMultipleWindows(true);

            // 화면에 추가하기
            webViewLayout.addView(childWebView);
            // TODO: 화면 추가 이외에 onBackPressed() 와 같이
            //       사용자의 내비게이션 액션 처리를 위해
            //       별도 웹뷰 관리를 권장함
            //   ex) childWebViewList.add(childWebView)
            // 웹뷰 간 연동
            WebView.WebViewTransport transport = (WebView.WebViewTransport)resultMsg.obj;
            transport.setWebView(childWebView);
            resultMsg.sendToTarget();

            return true;
        }

        /// ---------- 팝업 닫기 ----------
        /// - window.close()가 호출되면 앞에서 생성한 팝업 webview를 닫아야 합니다.
        ///
        @Override
        public void onCloseWindow(WebView window) {
            super.onCloseWindow(window);
            // 화면에서 제거하기
            webViewLayout.removeView(window);
            // TODO: 화면 제거 이외에 onBackPressed() 와 같이
            //       사용자의 내비게이션 액션 처리를 위해
            //       별도 웹뷰 array 관리를 권장함
            //   ex) childWebViewList.remove(childWebView)
        }

        public boolean onConsoleMessage(ConsoleMessage cm) {
            Log.d("MyApplication", cm.message() + " -- From line "
                    + cm.lineNumber() + " of "
                    + cm.sourceId() );
            return true;
        }
    });

아이디 비밀번호 입력하는 부분 까진 정상적으로 이루어지나
https://kauth.kakao.com/oauth/authorize?redirect_uri=kakaojs&response_type=code&state=cgi07bajrzmarglhfmhnoq&proxy=easyXDM_Kakao_in0e6hzoi9_provider&ka=sdk%2F1.39.1%20os%2Fjavascript%20lang%2Fen-US%20device%2FLinux_i686%20origin%2Ffile%3A%2F%2F&origin=file%3A%2F%2F&client_id=클라이언트 아이디

빈 크롬창에서 멈춰 있습니다…

주소를 복사해서 크롬에 입력시 카카오 로그인 후 빈페이지에서
F12눌러서 확인해보니 kauth.proxyHost(…).getKakaoAgent is not a function 라고 되어있습니다…
image

웹뷰 환경에서 opener를 못 찾고 있는 것 같아요.

저희가 원인 파악 예정이긴 하지만
클라이언트 환경과 관련이 있어서 빠르게 답변드리긴 어려운 내용 같아요.

추가로 opener 이슈가 없는 리다이렉트 방식으로 적용을 검토해보시는 방법도 있습니다.

1개의 좋아요

원인 파악되면 답글 부탁드립니다…
일단은 opener이슈가 없는 리다이렉트 방식을 생각해봐야겠네요

네 원인 파악되면, 답글 드릴게요.

참고로 리다이렉트 방식도 간편로그인 기능이 동일하게 제공되고 있습니다.

I have the same issue. Has this been solved?

혹시 이 이슈는 해결 되었을까요?