【问题标题】:How to send apprequest by Spring Social Facebook如何通过 Spring Social Facebook 发送请求
【发布时间】:2012-08-31 14:45:55
【问题描述】:

我一直在为 Facebook 挖掘 Spring Social (1.0.2.RELEASE)。我不知道如何通过 spring social 发送 apprequest。我已经在 facebook 上有一个带有键和东西的应用程序。我可以获取朋友等,但不能向特定的 facebook 用户发送 apprequest。真的很感激。

【问题讨论】:

  • 你是如何通过 spring-social-facebook 获取好友数据的?
  • 你遇到了什么问题?文档(developers.facebook.com/docs/requests)对此非常好,JS SDK 触发请求对话框,您需要一些服务器端代码来接受和删除请求
  • Spring social 对细节进行抽象,例如获取好友资料的代码为List<FacebookProfile> friendProfiles = facebook.friendOperations().getFriendProfiles();。一定有facebook.???Operations.send???(userId,redirect,data,message);之类的东西所以与developers.facebook.com上的文档无关,因为spring会为你处理它

标签: java facebook spring facebook-graph-api spring-social


【解决方案1】:

以下示例应该可以解决问题 - 即创建一个应用访问令牌,然后使用 FacebookTemplate 创建请求,该 FacebookTemplate 已使用创建的应用访问令牌进行初始化

// retrieve app access token
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=<app_id>&client_secret=<app_secret>",  String.class);
String appAccessToken = result.replaceAll("access_token=", "");

// create the request       
FacebookTemplate appRequestTemplate = new FacebookTemplate(appAccessToken);
String userId = "1234567890";
MultiValueMap<String, Object> requestData = new LinkedMultiValueMap<String, Object>();
requestData.set("message", "Sending a request through to you...");
String resultOfApprequest = appRequestTemplate.publish(userId, "apprequests", requestData);

【讨论】:

    【解决方案2】:

    根据 Facebook 文档,应用请求通过 POST 发送给用户,并发送到 Graph API。请参阅此处的“创建”部分:

    https://developers.facebook.com/docs/reference/api/user/#apprequests

    Spring Social Facebook 有一个 GraphApi 类,它有两种发送 POST 的方法,“publish()”会尝试从响应中提取 id,“post()”不会:

    http://static.springsource.org/spring-social-facebook/docs/1.0.x/api/org/springframework/social/facebook/api/GraphApi.html

    因此您可能需要按照以下方式拨打电话:

    Map<String, Object> requestData = new HashMap<String, Object>();
    requestData.put("message", "My app's request message");
    String requestId = graphApi.publish(userId, "apprequests", requestData);
    

    【讨论】:

    • 请注意,端点需要应用访问令牌,而不是用户访问令牌。通常,FacebookTemplate 是使用用户访问令牌构造的(尤其是通过连接框架构造时),因此该端点将不起作用。但是,您仍然应该能够使用应用访问令牌(通过客户端凭据授予获得)手动构建 FacebookTemplate 并发布到该端点。这有点笨拙,但应该可以工作。我真的应该考虑在 FacebookTemplate 中适当处理这样的应用程序级请求,这样就不那么笨拙了。考虑到这一点。
    猜你喜欢
    • 2015-04-20
    • 2012-06-21
    • 2018-06-06
    • 1970-01-01
    • 2011-12-30
    • 2012-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    相关资源
    最近更新 更多