igg*_*web 5 java jsp facebook restfb
我在我的智慧结束,我似乎无法发布消息作为页面,我可以作为管理员用户发布到Facebook页面,但不作为所有者本身发布到页面.
我的代码如下:
String MY_APP_ID = "xxxx";
String MY_APP_SECRET = "xxxx";
AccessToken accessToken = new DefaultFacebookClient().obtainAppAccessToken(MY_APP_ID, MY_APP_SECRET);
DefaultFacebookClient facebookClient = new DefaultFacebookClient(accessToken.getAccessToken());
FacebookType publishMessageResponse = facebookClient.publish("me/feed", FacebookType.class, Parameter.with("message", fbMessage));
fbMessageID = publishMessageResponse.getId();
Run Code Online (Sandbox Code Playgroud)
我相信上面的代码获得了App Access令牌,但是我收到以下错误:
OAuthException: An active access token must be used to query information about the current user.
Run Code Online (Sandbox Code Playgroud)
我有以下权限设置:
publish_actions, manage_pages, publish_stream
Run Code Online (Sandbox Code Playgroud)
如果我将代码修改为:
FacebookType publishMessageResponse = facebookClient.publish("MYAPPNAME/feed", FacebookType.class, Parameter.with("message", fbMessage));
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
OAuthException: (#200) The user hasn't authorized the application to perform this action.
Run Code Online (Sandbox Code Playgroud)
我已经阅读了很多这方面的内容,但看不到木头的树木,有人可以解释我哪里出错了,以及如何解决这个噩梦.
任何帮助将非常感激 :-)
我设法解决了这个问题.下面是我在我的一个页面中作为页面本身发帖的简单课程!
access_token和id字段,我们将在下面的代码中使用它们.而已.现在,
import com.restfb.DefaultFacebookClient;
import com.restfb.FacebookClient;
import com.restfb.Parameter;
import com.restfb.exception.FacebookException;
import com.restfb.types.FacebookType;
import com.restfb.types.Page;
import com.restfb.types.User;
/**
*
* @author dsfounis
*/
public class FacebookConnector {
/* Variables */
private final String pageAccessToken = "GET_THIS_FROM_THE_INSTRUCTIONS_ABOVE";
private final String pageID = "THIS_TOO";
private FacebookClient fbClient;
private User myuser = null; //Store references to your user and page
private Page mypage = null; //for later use. In this answer's context, these
//references are useless.
private int counter = 0;
public FacebookConnector() {
try {
fbClient = new DefaultFacebookClient(pageAccessToken);
myuser = fbClient.fetchObject("me", User.class);
mypage = fbClient.fetchObject(pageID, Page.class);
counter = 0;
} catch (FacebookException ex) { //So that you can see what went wrong
ex.printStackTrace(System.err); //in case you did anything incorrectly
}
}
public void makeTestPost() {
fbClient.publish(pageID + "/feed", FacebookType.class, Parameter.with("message", Integer.toString(counter) + ": Hello, facebook World!"));
counter++;
}
}
Run Code Online (Sandbox Code Playgroud)
makeTestPost()几次打电话后:

我非常确定pageID还可以使用String您的页面名称,您可以在访问页面链接时看到该页面名称.http://facebook.com/mypagename,所以你可以用pageID号代替"mypagename".
另一件事:publish()如果上一篇文章与您现在试图发布的帖子完全相同,则上面使用的方法将失败,可能是反垃圾邮件测试.这就是我实现的原因counter,所以我可以正确测试它.除了那个限制,makeTestPost()通过了猴子测试.
最后,我的做法可能不是最优或简单,但是像我一样,我花了几个小时迷失在不完整的文档和有关RestFB的信息中.