如何通过Spring Social Facebook发送应用请求

3

我一直在研究Spring Social (1.0.2.RELEASE)与Facebook的集成。但是我无法找到如何通过Spring Social发送apprequest的方法。我已经在Facebook上创建了一个应用程序并获取了密钥等信息。我可以获取好友列表等信息,但无法向特定的Facebook用户发送apprequest。非常感谢您的帮助。


你是如何通过spring-social-facebook获取朋友数据的? - Satish Pandey
你遇到了什么问题?这个文档(https://developers.facebook.com/docs/requests/)对此非常有帮助,JS SDK触发请求对话框,您需要一些服务器端代码来接受和删除请求。 - Igy
Spring Social抽象了细节,例如获取好友资料的代码是List<FacebookProfile> friendProfiles = facebook.friendOperations().getFriendProfiles();。必须有类似于facebook.???Operations.send???(userId,redirect,data,message);的东西。因此,与developers.facebook.com上的文档无关,因为Spring会为您处理它。 - hevi
2个回答

5
以下示例应该能解决问题 - 即创建一个应用程序访问令牌,然后使用已使用创建的应用程序访问令牌初始化的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);

0
根据Facebook文档,应用请求是通过向Graph API发送POST请求来发送给用户的。请在此处查看“创建”部分:

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);

1
请注意,该端点需要应用程序访问令牌,而不是用户访问令牌。通常,FacebookTemplate 是使用用户访问令牌构建的(特别是通过连接框架构建),因此该端点将无法工作。但是,您仍然可以手动使用应用程序访问令牌(通过客户端凭据授权获得)构建 FacebookTemplate 并发布到该端点。这有点笨拙,但应该可以工作。我真的应该考虑在 FacebookTemplate 中正确处理此类应用程序级请求,以使其更少笨拙。请注意这一点。 - Craig Walls

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接