Java + RestFB API:获取新的页面访问令牌而不会弄乱AppID,appSecret

时间:2014-12-30 17:51:22

标签: java facebook facebook-graph-api restfb

我想做什么:

我正在尝试制作一个简单的程序,一次在页面的墙上发布5-10个状态。页面的帖子必须在页面名称完成。

我已经阅读了大量写得不好的Facebook开发者文档,而且我甚至无法知道要问什么问题。所以我就是她。


到目前为止我的代码:

我通过以下方法手动获取了页面访问令牌:

  1. 转到https://developers.facebook.com/tools/explorer
  2. 在GET申请表上,在那里填写我/帐户
  3. 您将获得基本用户数据的Javascript表示。找到你想要的页面。
  4. 请注意access_token和id字段,我们将在下面的代码中使用它们。
  5. 因此,手动获取页面访问令牌(当然还有页面的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 = "GOT_THIS_FROM_THE_METHOD_ABOVE";
        private final String pageID = "THIS_TOO";
        private FacebookClient fbClient;
        private User myuser = null;    //Store references to myr user and page
        private Page mypage = null;    //for later use. In this question'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++;
        }
    
    }
    

    问题:

    以上代码有效。事情是,暂时有效。我得到的page access token的到期时间为一小时,每次运行程序时,我都需要手动完成获取它的过程。如果我将手册的某些方面手动保留,那么自动化流程的重点是什么?

    所以我必须问你:我可以通过编程方式执行上述过程,并在程序启动时获得新的page access token吗?

    我可以使用更好的API来做一些像这样简单的事情,只需每天在网页上发布一些内容吗?

    我的应用程序是一个控制台,我想远离实现不必要的登录,即使你告诉我它是必要的,它将是一个麻烦我将不得不经历。

    作为备注:我已经在Facebook开发者中注册了应用程序,尽管只是作为基本应用程序。为了获得更多权限,我需要显示Facebook登录实施的证据,正如我在标题中所说,这是我必须避免的事情。

1 个答案:

答案 0 :(得分:2)

没有自动过程来获取访问令牌。如果有,它将击败OAuth流程的整个目的。对于宠物项目和测试,可以使用Graph API Explorer,但对于涉及用户的公共应用程序,用户必须手动选择登录对话框。

在您当前的情况下,您可以使用此处提到的方法https://developers.facebook.com/docs/roadmap/completed-changes/offline-access-removal/

扩展用户令牌
  

场景5:页面访问令牌

     

当用户授予应用manage_pages权限时,该应用就可以了   获取用户管理的页面的页面访问令牌   查询[用户ID] /帐户图谱API端点。随着迁移   启用时,使用短期用户访问令牌进行查询   端点,获得的页面访问令牌也是短暂的。

     

交换短期用户访问令牌以进行长期访问   使用端点的令牌和前面解释的步骤。

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN
  

使用   长期用户访问令牌,查询[用户ID] /帐户端点   现在将提供页面访问令牌,这些令牌不会过期   用户管理。查询非过期时也适用   通过已弃用的offline_access获取的用户访问令牌   权限。

仅由应用程序所有者使用的简单程序不需要Facebook批准。

e.g。 https://www.facebook.com/phwdbot