restFB发布为页面一步一步的工作示例

时间:2013-09-24 13:12:09

标签: java facebook jsp 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();

我相信上面的代码获得了App Access令牌,但是我收到以下错误:

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.

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

非常感谢任何帮助: - )

1 个答案:

答案 0 :(得分:9)

我设法解决了这个问题。下面是我在我的一个页面中作为页面本身发帖的简单课程!

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

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

    在程序代码上!

    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()后: enter image description here


    一些注意事项:

    我非常确定pageID还可以获取您的网页名称的String,您可以在访问该网页的链接时看到该网页名称。 http://facebook.com/mypagename,因此您可以使用"mypagename"替换pageID号。

    另一件事:如果上一篇文章与您现在试图发布的帖子完全相同,则上面使用的publish()方法将失败,可能是反垃圾邮件测试。这就是我实现counter的原因,所以我可以正确测试它。除了该限制,makeTestPost()通过了Monkey Test

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