检查用户喜欢Facebook粉丝页面与facebook javascript sdk

时间:2014-06-02 16:53:34

标签: javascript jquery facebook facebook-graph-api facebook-javascript-sdk

我是Facebook应用程序开发的新手! 所以我有使用facebook sdk的新项目如果使用连接而不是像这个粉丝页面那样显示facebook插件粉丝页面

我的代码html.index

<html>
      <body>
             <div id="fb-root"></div>
             <fb:like href="https://www.facebook.com/mypage" layout="standard" action="like" show_faces="true" share="true"></fb:like>
      </body>
</html>

的javascript

window.fbAsyncInit = function() {
FB.init({
  appId      : appId,
  xfbml      : false, //boot to load speed
  cookie     : true,
  status     : true,
  version    : appVersion
});

FB.getLoginStatus(function(response) {


    if (response.status == 'connected') {
          var UserId = response.authResponse.userID; //get user id
          FB.api('/me/likes/'+fanpageId, function(response) {
            console.log(response);
            if (response.data[0]) {
               //user has liked
            } else {
                FB.XFBML.parse(); //parse show plugin
            }
        });

    } else {
       //user not login
    }
});

};

//render facebook SDK
   (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 = document.location.protocol + "//connect.facebook.net/" + appLanguage +               "/sdk.js";
 fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));

但插件总是在没有

的情况下显示

我需要当用户连接并且不喜欢这个页面时,插件显示!

一个问题!为什么我的个人资料ID与用户ID不相同?

1 个答案:

答案 0 :(得分:0)

您可以在后端执行此操作。我听说使用PHP很方便,但我是一个Java人员,所以我会告诉你我是如何使用Java的。我有一个servlet,我称之为FanGateServlet。它的作用是获取在访问应用程序时发送给我的Facebook的signed_request,解码它以确定用户是否喜欢该页面。 使用servlet的doPost方法

    protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
            String signedReq = request.getParameter("signed_request");

            if (signedReq == null) {
                logger.warn("ERROR: Unable to retrieve signed_request parameter");
                response.sendRedirect(appDomain+"/default.html");
            } else {
                Base64 base64 = new Base64();

                // split request into signature and data
                String[] signedRequest = signedReq.split("\\.", 2);

                // parse signature
    //          String sig = new String(base64.decode(signedRequest[0].getBytes("UTF-8")));

                // parse data and convert to json object
                String data = new String(base64.decode(signedRequest[1].getBytes("UTF-8")));

                // check whether the user has 'liked' the page
                boolean isLikedPage = data.contains("\"page\":{\"id\":\"xxxxxxxxxxxxxxxxxx\",\"liked\":true");

                if (isLikedPage) {
                    response.sendRedirect(appDomain+"/home.html");
                }else{
                    response.sendRedirect(appDomain+"/like-page.html");
                }
            }
        }
}

xxxxxxxxxxxxxxxxxx - 这是您的网页ID。 home.html - 您向喜欢您网页的粉丝展示的页面。 like-page.html - 您向尚未喜欢您网页的用户展示的网页。

为此,您的应用程序服务器中应该有commons-codec jar。 (不是Project lib文件夹)

另一个重要的事情,在Facebook Developer设置中,在页面标签设置下,页面标签页面应该是您的servlet模式的URL。

http://appDomain/fangate.do

在web.xml中,你应该将fangate.do映射映射到你的FanGateServlet.java

您不仅可以阅读signed_request以查看用户是否喜欢您的页面(在javascript sdk中未获得用户权限),在我的情况下我也想发送参数。您可以使用app_data执行此操作。让我知道是否应该更多地解释一下。 :)