>source

웹뷰를 사용하여 Google 로그인 및 페이스 북 로그인이있는 웹 사이트를 렌더링하는 Android 앱이 있습니다. 문제는 Google 또는 페이스 북 로그인을 할 때 모바일 브라우저를 열고 로그인에 성공하면 앱으로 돌아 가지 않고 브라우저에 남아 있다는 것입니다. 앱으로 이동하고 싶습니다. 로그인 페이지가 웹뷰 자체에서 열리 든 브라우저에서 열리 든 상관 없습니다. 그러나 로그인에 성공하면 앱의 홈 웹 사이트로 다시 리디렉션되어야합니다. 웹 페이지 자체에서 로그인 페이지를 렌더링하려고 시도했지만 로그인 후 페이지에 멈 춥니 다.

매니페스트에 인터넷 권한을 추가했습니다

public class MainActivity extends AppCompatActivity {
    WebView myWebView;
    WebView myPopedWebView;
    WebSettings myWebSettings;
    FrameLayout mContainer;
    String HOME_URL = "https://www.something.com";
    String HOME_URL_PREFIX = "www.something.com";
    Context mContext;
    @SuppressLint("SetJavaScriptEnabled")
    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        CookieManager cm = CookieManager.getInstance();
        cm.setAcceptCookie(true);
        myWebView = findViewById(R.id.myWebView);
        myWebSettings = myWebView.getSettings();
        mContainer = findViewById(R.id.frame_layout);
        myWebView.loadUrl(HOME_URL);
        myWebView.setWebViewClient(new customWebViewClient());
        myWebView.setWebChromeClient(new customWebChromeClient());
        myWebSettings.setJavaScriptEnabled(true);
        myWebSettings.setDomStorageEnabled(true);
        myWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        myWebSettings.setAppCacheEnabled(true);
        myWebSettings.setSupportMultipleWindows(false);
        myWebSettings.setUserAgentString(myWebSettings.getUserAgentString().replace("; wv", ""));
        mContext = this.getApplicationContext();
    }
    public class customWebViewClient extends WebViewClient {
        @Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
            String host = Uri.parse(url).getHost();
            Log.d("Loading url", url);
            if (host.equals(HOME_URL_PREFIX)) {
                if (myPopedWebView != null) {
                    myPopedWebView.setVisibility(View.GONE);
                    mContainer.removeView(myPopedWebView);
                    myPopedWebView = null;
                }
                return false;
            }
            if (host.equals("www.facebook.com") || host.equals("www.accounts.google.com")) {
                return false;
            }
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return false;
        }
        @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            Log.d("onReceivedSslError", "onReceivedSslError");
        }
    }
    public class customWebChromeClient extends WebChromeClient {
        @SuppressLint("SetJavaScriptEnabled")
        @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            myPopedWebView = new WebView(mContext);
            myPopedWebView.getSettings().setDomStorageEnabled(true);
            myPopedWebView.getSettings().setJavaScriptEnabled(true);
            myPopedWebView.setWebChromeClient(new customWebChromeClient());
            myPopedWebView.setWebViewClient(new customWebViewClient());
            myPopedWebView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            WebView.WebViewTransport transport = (WebView.WebViewTransport)resultMsg.obj;
            transport.setWebView(myPopedWebView);
            resultMsg.sendToTarget();
            return true;
        }
        @Override public void onCloseWindow(WebView window) {
            Log.d("onCloseWindow", "closed");
        }
    }
}


  • 답변 # 1

    로그인 콜백으로 페이스 북 (또는 구글) 계정 로그인을 요청하는 코드가 없습니다. 수행 할 수있는 작업은 다음과 같습니다.

      페이스 북 또는 Google 버튼으로 로그인 한 웹 사이트에서 로그인 기능 (로그인 콜백 URL 구성과 함께)을 코딩하십시오.

      또는 Android 앱에서 페이스 북 및 Google 로그인 (auth) SDK를 추가하고 앱에서 로그인 및 콜백을 처리 할 수 ​​있습니다 (java/kotlin 코드 작성).

      두 방법 중 하나를 선택할 수 있으며 웹 (접근 1) 또는 안드로이드 (접근 2)에 페이스 북 SDK를 통합하는 방법에 대한 온라인 자습서를 쉽게 찾을 수 있습니다.

      해피 코딩 !!

관련 자료

  • 이전 mysql - 게시물에 대한 다중 평가 시스템 (예 - 사랑, 별표)
  • 다음 angular - 조건부로 사용자에게 탐색을 허용하는 방법