由于默认浏览器,Android 无法在 webview 中实现 facebook 评论 [英] Android unable to implement facebook comment in a webview due to default browser
问题描述
我是 Android 开发的新手,这个 webview 和 webview 客户端正在杀死我.这是我的场景:
I am newbie to Android development and this webview and webview client is killing me. This is my scenario:
- 我必须加载一个包含 facebook 社交插件的网页(用于对该特定 url 发表评论),并且我正在使用 WebView
- 当用户使用 Facebook 点击评论时,他/她将在同一个 webview 上获得登录页面(而不是打开默认浏览器)
- 登录成功后,将显示第一页(包含社交插件的页面),允许用户发表评论
我要做的是模拟浏览器的工作过程,即用户在登录时,他/她被自动授予添加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.此外,我在 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:
如何在 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
登录,但不能实现AOL
、Hotmail
和Yahoo
登录.对于 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
推荐答案
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屋!