5

我束手无策,我似乎无法将消息作为页面发布,我可以作为管理员用户发布到 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();

我相信上面的代码获得了一个应用访问令牌,但我收到以下错误:

OAuthException: An active access token must be used to query information about the current user.

我设置了以下权限:

publish_actions, manage_pages, publish_stream

如果我将代码修改为:

FacebookType publishMessageResponse = facebookClient.publish("MYAPPNAME/feed", FacebookType.class, Parameter.with("message", fbMessage));

我收到以下错误:

OAuthException: (#200) The user hasn't authorized the application to perform this action.

我已经阅读了很多关于这方面的内容,但看不到树木的树木,有人可以解释我哪里出错了以及我如何解决这个噩梦。

任何帮助将非常感激 :-)

4

1 回答 1

9

我设法解决了。下面是一个简单的类,用于在我的一个页面中作为页面本身发布帖子!

预编码说明:获取您的页面 AccessToken 和 PageID

  1. 转到https://developers.facebook.com/tools/explorer
  2. 在 GET 请求表的下方,填写我/帐户
  3. 您将获得基本用户数据的 Javascript 表示。找到你想要的页面。
  4. 注意access_tokenandid字段,我们将在下面的代码中使用它们。

而已。现在,

进入程序代码!

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++;
    }

}

结果:

makeTestPost()了几次电话后: 在此处输入图像描述


一些注意事项:

我很确定 pageID 也可以采用String您的页面名称,您可以在访问页面时在页面的链接上看到它。http://facebook.com/mypagename,因此您可以将 pageID 编号替换为"mypagename".

另一件事:publish()如果之前的帖子与您现在尝试发布的帖子完全相同,则上述方法将失败,可能是反垃圾邮件措施。这就是我实现的原因counter,所以我可以正确地测试它。除了那个限制之外,还makeTestPost()通过了猴子测试

最后,我的做法可能并不理想或过于简单,但像您一样,我花了好几个小时迷失在有关 RestFB 的不完整文档和信息中。

于 2014-12-30T15:49:15.223 回答