由于默认浏览器,Android无法在webview中实现Facebook的评论 [英] Android unable to implement facebook comment in a webview due to default browser

查看:182
本文介绍了由于默认浏览器,Android无法在webview中实现Facebook的评论的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Android开发的新手,这个webview和webview客户端正在杀死我。这是我的场景:

I am newbie to Android development and this webview and webview client is killing me. This is my scenario:


  1. 我必须加载一个包含Facebook社交插件的网页(用于评论该特定网址)和我我正在使用WebView

  2. 当用户使用Facebook点击评论时,他/她将被授予同一网页浏览的登录页面(而不是打开默认浏览器)

  3. 一旦登录成功,将显示第一页(包含社交插件的页面),允许用户评论

我要做的是模拟浏览器的工作过程,即用户登录时,他/她被自动授予添加Facebook评论的权限。

What I have to do is emulate the working process of browser i.e. the user when logs in, he/she is automatically granted permission to add facebook comment.

我的问题:

我不知道如何从浏览器获取所有身份验证,并将其重定向到我的应用程序的Webview。我想要的是在我的应用程序网络视图中进行所有的过程,而不是默认浏览器。

I don't know how to get all the authentication from browser and redirect it back to my app webview. What I want is to do all the process in my app webview rather than going to default browser.

我已经检查了所有的堆栈溢出问题,大多数建议使用开源Facebook插件,如Facebook连接和Facebook Android SDK。此外,我获得了一些关于 CookieManager CookieSyncManager WebViewClient WebChromeClient ,但我无法在我的问题上实现。最近我发现这是:

I have checked all the stack overflow questions and most of them advise on using open source Facebook plugins like Facebook connect and Facebook android SDK. Further I got some info on CookieManager, CookieSyncManager, WebViewClient, WebChromeClient but I couldn't implement on my issue. And the closest I found is this:

如何处理Facebook,如同在android webview 中确认

所以,如果你能指出我在右边方向,我会很高兴的。我仍然在努力了解如何在网络视图中进行所有操作,如果有任何事情我一定会发布。

So folks if you could point me in the right direction, I would be very glad. I am still trying to understand on how to make all the action on a webview and if anything comes I will surely post.

提前感谢

更新

我只能实现 facebook login但不能实现 AOL Hotmail Yahoo login 。对于 facebook 登录只需创建一个自定义WebViewClient和方法shouldOverrideUrlLoading

I could only implement facebook login but couldn't implement AOL,Hotmail and Yahoo login. For facebook login just create a custom WebViewClient and on method shouldOverrideUrlLoading

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

要允许多次登录,我已经实现了以下技术,但它不起作用

To allow multiple login I have implemented following technique but it doesn't work

 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;

我仍然尽力找到解决方案,任何人都会指导我正确的方向这将不胜感激。
提前感谢

I am still doing my best to find the solution, and anybody out there would guide me in proper direction that would be grateful . Thanks in advance

推荐答案


如何处理facebook喜欢在android webview中确认
是最好的解决方案我发现到目前为止,我学到的是 Android WebView 不默认加载html视图的弹出窗口因此,我们需要使用 WebChromeClient 来处理所有这些。请看以下代码

The answer provided on How to handle facebook like with confirm in android webview is the best solution I have found so far.What I learnt is that Android WebView doesn't by default load the popup of html views and for that we need to use WebChromeClient which handles all these.Look at the following code

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

这是为了实现 Facebook社会评论插件 Android WebView ,如果有人发现任何缺陷,那么我很乐意纠正它。希望,这个解决方案可以节省时间和任何像我一样麻烦的开发人员;)

This is all one has to do to implement Facebook Social Comment Plugin on Android WebView and if somebody finds any flaw in it,then I would be happy to correct it.And hope,this solution would save and time on any troubled developer like me ;)

这篇关于由于默认浏览器,Android无法在webview中实现Facebook的评论的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆