2011-12-20 3 views
7

Android 개발에 초보자이며이 webview 및 webview 클라이언트가 나를 죽이고 있습니다. 기본 브라우저로 인해 Android가 webview에서 페이스 북 코멘트를 구현할 수 없습니다.

  • 사용자가 페이스 북을 사용하여 설명을 클릭하면, 그는 내가 (특정 URL에 대한 주석에 사용) 페이스 북 소셜 플러그인이 포함 된 웹 페이지를로드 할

    1. 나는 그것을 위해 웹보기를 사용하고 있습니다 : 이것은 내 시나리오입니다/그녀는 로그인 페이지
    2. (대신 개방의 기본 브라우저의) 그리고 로그인이 성공하면, 첫 페이지 (소셜 플러그인을 포함하는 하나) 수 표시 할 같은 웹보기에 사용자가
    을 의견을 고려하여야한다

    내가해야 할 일은 눈썹의 작업 과정을 모방하는 것입니다. 즉, 로그인 할 때 사용자는 자동으로 페이스 북 코멘트 추가 권한을 부여받습니다.

    내 문제 : 나는 브라우저에서 모든 인증을 얻고 다시 내 응용 프로그램 웹보기로 다시 리디렉션하는 방법을 모른다

    . 내가 원하는 것은 기본 브라우저로 이동하는 대신 내 app webview에서 모든 프로세스를 수행하는 것입니다.

    모든 스택 오버플로 관련 질문을 확인했으며 그 중 대부분은 Facebook 연결 및 Facebook android SDK와 같은 오픈 소스 Facebook 플러그인 사용에 대한 조언을 제공합니다. 또한 CookieManager, CookieSyncManager, WebViewClient, WebChromeClient에 대한 정보가 있지만 문제를 구현할 수 없습니다. 그리고 내가 찾은 가장 가까운 이것이다 : 당신이 올바른 방향으로 날 지점 수

    How to handle facebook like with confirm in android webview

    그래서 사람들 경우, 나는 매우 기쁠 것입니다. 나는 여전히 웹뷰에서 모든 행동을 취하는 방법을 이해하려고 노력하고 있으며 어떤 일이 생기면 반드시 게시 할 것입니다. 사전

    업데이트

    에서

    덕분에 난 단지 facebook 로그인을 구현할 수 있지만 AOL, HotmailYahoo 로그인을 구현할 수 없었다. facebook 로그인 단지 지정 WebViewClient 및 방법의 shouldOverrideUrlLoading에를 만들 들어

    if(url.contains("https://www.facebook.com/connect/window_comm.php")){ 
        webView.clearHistory(); 
        webView.loadUrl(remoteUrl); 
    } 
    return false; 
    

    는 기술 다음 내가 구현 한 다중 로그인을 허용하려면하지만 난 여전히를 찾을 수 내 최선을 다하고 있어요

    if(url.contains("https://www.facebook.com/connect/window_comm.php")){ 
        String cookieString = cookieManager.getCookie("facebook.com"); 
        if(cookieString != null){ 
         cookieManager.setCookie("remoteUrldomain.com", cookieString); 
         CookieSyncManager.getInstance().sync(); 
         webView.clearHistory(); 
         webView.loadUrl(remoteUrl); 
        } 
    } 
    return false; 
    

    작동하지 않습니다 해결책을 제시하고 거기에있는 누구라도 적절한 방향으로 나를 인도 해 주면 감사 할 것입니다. 사전에 감사

  • 답변

    11

    How to handle facebook like with confirm in android webview 에 제공 대답은 내가 AndroidWebView는 HTML 뷰의 팝업을로드 기본적으로하지 않는다는 것입니다 배운 내가 너무 뭡니까 발견 한 최적의 솔루션이며, 그것을 위해 우리가 사용할 필요가 이 모든 것을 처리하는 WebChromeClient.다음 코드를보고

    private String requestUrl="some web link containing facebook social comment"; 
    private WebView webView,childView =null; 
    private LinearLayout parentLayout; 
    private Activity MyActivity; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
        super.onCreate(savedInstanceState); 
        this.getWindow().requestFeature(Window.FEATURE_PROGRESS); 
    
        setContentView(R.layout.main); 
    
        getWindow().setFeatureInt(Window.FEATURE_PROGRESS,Window.PROGRESS_VISIBILITY_ON); 
        parentLayout =(LinearLayout)findViewById(R.id.parentLayout); 
    
    
        MyActivity = this; 
    
    
        webView = new WebView(this); 
        webView.setLayoutParams(getLayoutParams()); 
    
        webView.setWebViewClient(new FaceBookClient()); 
        webView.setWebChromeClient(new MyChromeClient()); 
        webView.getSettings().setJavaScriptEnabled(true); 
        webView.getSettings().setAppCacheEnabled(true); 
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
        webView.getSettings().setSupportMultipleWindows(true); 
        webView.getSettings().setSupportZoom(true); 
        webView.getSettings().setBuiltInZoomControls(true); 
    
        parentLayout.addView(webView); 
        webView.loadUrl(requestUrl); 
    
    } 
    
        private LinearLayout.LayoutParams getLayoutParams(){ 
        return new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); 
    } 
    
    
        final class MyChromeClient extends WebChromeClient{ 
        @Override 
        public boolean onCreateWindow(WebView view, boolean dialog, 
          boolean userGesture, Message resultMsg) { 
         childView = new WebView(SmCommentTestActivity.this); 
         childView.getSettings().setJavaScriptEnabled(true); 
         childView.getSettings().setSupportZoom(true); 
         childView.getSettings().setBuiltInZoomControls(true); 
         childView.setWebViewClient(new FaceBookClient()); 
         childView.setWebChromeClient(this); 
         childView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); 
    
    
         parentLayout.addView(childView); 
    
    
         childView.requestFocus(); 
         webView.setVisibility(View.GONE); 
    
          /*I think this is the main part which handles all the log in session*/ 
         WebView.WebViewTransport transport =(WebView.WebViewTransport)resultMsg.obj; 
         transport.setWebView(childView); 
         resultMsg.sendToTarget(); 
         return true; 
        } 
    
    
        @Override 
        public void onProgressChanged(WebView view, int newProgress) { 
         MyActivity.setProgress(newProgress*100); 
        } 
    
        @Override 
        public void onCloseWindow(WebView window) { 
         parentLayout.removeViewAt(parentLayout.getChildCount()-1); 
         childView =null; 
         webView.setVisibility(View.VISIBLE); 
         webView.requestFocus(); 
        } 
    } 
    
        private class FaceBookClient extends WebViewClient{ 
        @Override 
        public boolean shouldOverrideUrlLoading(WebView view, String url) { 
         Log.i("REQUEST URL",url); 
         return false; 
        } 
    } 
    
        @Override 
        public void onBackPressed() { 
        if(childView != null && parentLayout.getChildCount()==2){ 
         childView.stopLoading(); 
         parentLayout.removeViewAt(parentLayout.getChildCount()-1); 
         if(webView.getVisibility() == View.GONE) 
          webView.setVisibility(View.VISIBLE); 
        }else{   
         super.onBackPressed(); 
        } 
    } 
    

    이 하나가 Android WebViewFacebook Social Comment Plugin을 구현하기 위해 할 수있는 모든 것입니다 누군가가 어떤 결함을 발견하면, 그때는 그게 뭔지는이 솔루션을 절약 할 희망을 수정하실 수 있습니다 및 시간이 나 같은 어떤 문제가있는 개발자;)

    +0

    이 코드에서 requestUrl이어야합니다. –

    +0

    lib 폴더에 jar 파일을 설치해야합니까? –

    +0

    로그인 한 후 계속 페이지를 새로 고칩니다. – Minion

    관련 문제