Skip to content

Instantly share code, notes, and snippets.

@emanuelet
Created April 10, 2016 05:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emanuelet/2eb2b2e411fd5808f38e95d3daecd5ca to your computer and use it in GitHub Desktop.
Save emanuelet/2eb2b2e411fd5808f38e95d3daecd5ca to your computer and use it in GitHub Desktop.
Integrating Facebook Comments Plugin with Android Webview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageButton
android:id="@+id/reload"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:background="?android:attr/selectableItemBackground"
android:padding="@dimen/double_spacing"
android:src="@drawable/ic_refresh"
android:text="@string/reload"/>
<FrameLayout android:id="@+id/webview_frame"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0099cc">
<WebView
android:id="@+id/commentsView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"/>
</FrameLayout>
</LinearLayout>
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Bind(R.id.commentsView)
WebView comments;
@Bind(R.id.webview_frame)
FrameLayout mContainer;
private String url = "http://www.example.news";
private String BASE_DOMAIN = "http://www.example.news";
private static final String target_url_prefix = "www.example.news";
private String PATH_URL = "/?id=1";
private WebView mWebviewPop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
setTitle(getString(R.string.app_name));
loadComments();
}
private void loadComments() {
comments.setWebViewClient(new UriWebViewClient());
comments.setWebChromeClient(new UriChromeClient());
comments.getSettings().setJavaScriptEnabled(true);
comments.getSettings().setAppCacheEnabled(true);
comments.getSettings().setDomStorageEnabled(true);
comments.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
comments.getSettings().setSupportMultipleWindows(true);
comments.getSettings().setSupportZoom(true);
comments.getSettings().setBuiltInZoomControls(true);
CookieManager.getInstance().setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= 21) {
comments.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
CookieManager.getInstance().setAcceptThirdPartyCookies(comments, true);
}
Log.d(TAG, "loading " + BASE_DOMAIN + PATH_URL);
comments.loadDataWithBaseURL(BASE_DOMAIN,
"<html><head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"></head><body><div id=\"content\"><div id=\"fb-root\"></div><div id=\"fb-root\"></div><script>(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return;js = d.createElement(s); js.id = id;js.src = \"http://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5&appId=" + Constants.FB_KEY + "\";fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));</script><div class=\"fb-comments\" data-href=\""
+ BASE_DOMAIN + PATH_URL + "\"></div></div> </body></html>", "text/html", null, null);
comments.setMinimumHeight(200);
}
private class UriWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String host = Uri.parse(url).getHost();
Log.d(TAG, "url: " + url + ", host: " + host);
if (host.equals("m.facebook.com")) {
return false;
}
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String host = Uri.parse(url).getHost();
Log.d(TAG, "page finished url: " + url + ", host: " + host);
if (url.contains("/plugins/close_popup.php?reload")) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something after 100ms
mContainer.removeView(mWebviewPop);
loadComments();
}
}, 600);
}
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
Log.d("onReceivedSslError", "onReceivedSslError");
}
}
class UriChromeClient extends WebChromeClient {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog,
boolean isUserGesture, Message resultMsg) {
Log.d("onCreateWindow", "called");
mWebviewPop = new WebView(mContext);
mWebviewPop.setVerticalScrollBarEnabled(false);
mWebviewPop.setHorizontalScrollBarEnabled(false);
mWebviewPop.setWebViewClient(new UriWebViewClient());
mWebviewPop.setWebChromeClient(this);
mWebviewPop.getSettings().setJavaScriptEnabled(true);
mWebviewPop.getSettings().setDomStorageEnabled(true);
mWebviewPop.getSettings().setSupportZoom(true);
mWebviewPop.getSettings().setBuiltInZoomControls(true);
mWebviewPop.getSettings().setSupportMultipleWindows(true);
mWebviewPop.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
mContainer.addView(mWebviewPop);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(mWebviewPop);
resultMsg.sendToTarget();
return true;
}
@Override
public boolean onConsoleMessage(ConsoleMessage cm) {
Log.d("WebViewDebug", cm.message() + " -- From line "
+ cm.lineNumber() + " of "
+ cm.sourceId());
return true;
}
@Override
public void onCloseWindow(WebView window) {
Log.d("onCloseWindow", "called");
}
}
@OnClick(R.id.reload)
public void reload() {
comments.reload();
}
}
@tolepcoy
Copy link

tes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment