我是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不相同?
答案 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执行此操作。让我知道是否应该更多地解释一下。 :)