Created
April 10, 2016 05:50
-
-
Save emanuelet/2eb2b2e411fd5808f38e95d3daecd5ca to your computer and use it in GitHub Desktop.
Integrating Facebook Comments Plugin with Android Webview
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
tes