2011-12-20 5 views
7

私はAndroid開発の初心者です。このwebviewとwebviewクライアントが私を殺しています。 デフォルトのブラウザのため、Androidがwebviewにfacebookのコメントを実装できません

  • ユーザーがフェイスブックを使ってコメントをクリックすると、彼は私が(その特定のURLにコメントするために使用される)のFacebookのソーシャルプラグインを含むWebページをロードする必要が

    1. と私はそれのためのWebViewを使用しています:これは私のシナリオです/彼女が(代わりにオープニングデフォルトブラウザの)同じWebViewの上のログインページを与えられるべき
    2. 、ログインが成功したら、最初のページ(ソーシャル・プラグインを含むもの)は、ユーザが
    をコメントすることができます表示されます

    私がしなければならないことは、眉の作業プロセスをエミュレートすることですログインすると自動的にFacebookのコメントを追加する許可が与えられます。

    私の問題:私は、ブラウザからのすべての認証を取得し、戻って私のアプリのWebViewのためにそれをリダイレクトする方法がわからない

    。私が望むのは、デフォルトのブラウザに行くのではなく、アプリのWebviewですべての処理を行うことです。

    私はすべてのスタックオーバーフローに関する質問をチェックしており、そのほとんどはFacebook ConnectやFacebook android SDKのようなオープンソースのFacebookプラグインの使用について助言しています。さらに私はCookieManagerCookieSyncManagerWebViewClientWebChromeClientについていくつかの情報を得ましたが、私の問題で実装できませんでした。そして、私が見つけた最も近いがこれです:あなたは正しい方向に私を指すことができれば

    How to handle facebook like with confirm in android webview

    だから、皆さん、私は非常に喜んでいるだろう。私はまだwebview上ですべてのアクションを行う方法を理解しようとしています。何かが来たら、必ず投稿します。事前に

    おかげ

    更新

    私はfacebookログインを実装することができますがAOLHotmailYahooログインを実装することができませんでした。 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ビューのポップアップをロードし、デフォルトではないということです学んだ私はそうfar.What発見した最適なソリューションであり、そのために私たちが使用する必要がありますこれらすべてを処理する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(); 
        } 
    } 
    

    これは1がAndroid WebViewFacebook Social Comment Pluginを実装するために行う必要があり、すべてであると誰かがそれで任意の欠陥が見つかった場合、その後、私はit.Andは、このソリューションは節約になる願って訂正して幸せになると私のような問題のある開発者の時間;)

    +0

    このコードではrequestUrlが必要です。 –

    +0

    libフォルダに任意のjarファイルをインストールする必要はありますか? –

    +0

    ログイン後、ページを更新し続けます。 – Minion

    関連する問題