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

查看:33
本文介绍了由于默认浏览器,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 社交插件的网页(用于对该特定 url 发表评论),并且我正在使用 WebView
  2. 当用户使用 Facebook 点击评论时,他/她将在同一个 webview 上获得登录页面(而不是打开默认浏览器)
  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.我想要的是在我的应用程序 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 connect 和 Facebook android SDK.此外,我在 CookieManagerCookieSyncManagerWebViewClientWebChromeClient 上获得了一些信息,但我无法解决我的问题.我找到的最接近的是这个:

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:

如何在 android 中使用确认处理 facebook网页视图

所以如果你能指出我正确的方向,我会很高兴.我仍在努力了解如何在 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登录,但不能实现AOLHotmailYahoo登录.对于 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

推荐答案

答案提供于如何在 android webview 中使用确认处理 facebook 是迄今为止我找到的最好的解决方案.我学到的是 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();
    }
}

这就是在 Android WebView 上实现 Facebook Social Comment Plugin 所要做的一切,如果有人发现其中的任何缺陷,那么我很乐意纠正它.并希望,这个解决方案可以为像我这样陷入困境的开发人员节省时间;)

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天全站免登陆