Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Facebook like button in WebView with SDK

I'm trying to implement Facebook Like button which is not part of Android Facebook SDK using WebView. The idea is very simple. I use SDK to log into user account using SSO so user don't need to type login/password again if user is already logged in android FB app. Then I want to use WebView to insert standard Like Button.
I already have user auth token, permission for sending status on the wall etc. The problem is how to tell WebView that user is already sign-in. I was trying to use WebView (with enabled JS) with this URL (webview.loadURL()) generated by FB:

http://www.facebook.com/plugins/like.php?href=myurl&send=false&layout=button_count&width=450&show_faces=true&action=like&colorscheme=light&font&height=21&appId=myId"
            + "&token=" + mFacebook.getAccessToken()+"&expires="+mFacebook.getAccessExpires(); //(or auth_token instead)<br>

Obviously this is wrong/or is not enought to send autorization in this way because after click on Like button user is redirected to login page in web browser.
So the question is how to edit this URL or how to set cookies (what to set to URL in CookieManager and which cookies) in WebView to sign user in.
Thanks for any help!

like image 434
Warlock Avatar asked Sep 17 '12 17:09

Warlock


1 Answers

I'm not quite sure about FB app access token being valid for using the web api, but let's try something.

First, make sure you're actually using cookies for your WebView instance:

CookieManager.getInstance().setAcceptCookies(true);

I'm not sure whether the facebook redirect page will try to set cookies, so try this and see if it does the trick:

webview.setWebViewClient(new WebViewClient() {  
  @Override  
  public boolean shouldOverrideUrlLoading(WebView view, String url)  
  {  
    view.loadUrl(url);  
    return true;
  }  
});

This will force your WebView to open links within itself, so cookies - if any - won't be lost in case the like page issues a redirect.

If problem still persists you can also try setting cookies manually by executing this before you load the url in your WebView:

// This just initializes the sync manager, do it once
CookieSyncManager.createInstance(this);

CookieManager.getInstance().setCookie("facebook.com", "token="
        + mFacebook.getAccessToken() + "; domain=facebook.com");
CookieSyncManager.getInstance().sync();
like image 51
Ivan Bartsov Avatar answered Nov 16 '22 19:11

Ivan Bartsov