1

我的应用程序中有一个方法允许用户“喜欢”他/她的新闻提要中的帖子。它是通过一个简单的图形请求使用HttpMethod.POST. 但是,当我尝试使用 执行“不同”操作HttpMethod.DELETE时,我收到一个错误回调:

02-08 00:35:57.298: I/Detail(2628): {Response:  responseCode: 403, graphObject: null, error: 
{HttpStatus: 403, errorCode: 200, errorType: OAuthException, errorMessage: (#200) 
Feed story publishing to other users is disabled for this application}, isFromCache:false}

现在我认为这与最近尝试让所有与 Facebook 集成的应用程序使用所有 Facebook 外观对话框和样式有关,但我可能是错的。这是让我怀疑的路线图帖子:

删除通过 Graph API 向朋友墙发帖的功能 我们将删除通过 Graph API 向用户朋友墙发帖的功能。具体来说,针对 [user_id]/feed 的 [user_id] 与会话用户不同的帖子,或 target_id 用户与会话用户不同的 stream.publish 调用将失败。如果您想允许人们发布到他们朋友的时间线,请调用提要对话框。通过用户提及标签或动作标签包含朋友的故事将显示在朋友的时间线上(假设朋友批准标签)。有关详细信息,请参阅此博客文章。

关于我可能做错了什么的任何想法,或者 Facebook 只是毁了我?谢谢!

编辑:这是我用来运行请求的代码。

Request likeRequest = new Request(Utility.fbSession, null, null, null, new Request.Callback() {
    @Override
    public void onCompleted(Response response) {
        String responseString = response.toString();
        Log.i("Detail", responseString);
        updateDetail();
    }
});
HttpMethod nextLikeCall = HttpMethod.DELETE;
likeRequest.setHttpMethod(nextLikeCall);
likeRequest.setGraphPath(itemId+"/likes");
likeRequest.executeAsync();
4

2 回答 2

1

当您从图表数据中获取帖子 ID 时,它应该采用如下格式:XXXXX_YYYYY。XXXXXX 只是用户 ID,而 YYYYY 是实际的帖子 ID。您需要做的是仅提取并使用图表为您提供的帖子 ID 的 YYYYY 部分。所以你想发送graph.facebook.com/YYYYY/likes而不是graph.facebook.com/XXXXX_YYYYY/likes。这将适用于喜欢和不喜欢,您可以先在图形资源管理器中进行测试,然后再将子字符串提取方法组合在一起。

不知道如何在 Android 上提取字符串的一部分,但我知道在 Objective-C/iOS 中,可以这样做(代码未经测试,供参考/想法):

SString *actualPostIdStr;      //The String we will put the actual postId in
NSString *oldIdStr          =   //<the string in format XXXXX_YYYYY>
NSInteger charCount         =   [oldIdStr length]; //get the length of the original XXXXX_YYYYY string
NSRange fRangeCount         =   [oldIdStr rangeOfString:@"_"]; //get count of characters to remove (XXXXXX)


if (fRangeCount.location != NSNotFound){
    NSInteger startingPos   =   fRangeCount.location + 1; //get the starting character position of the actual postId
    actualPostIdStr         =   [[oldIdStr substringWithRange:NSMakeRange(startingPos, charCount - startingPos)] copy];
}

希望这可以帮助。

编辑:
好的,所以我整天都在玩喜欢...似乎这种方法有时不起作用,但这完全取决于您尝试喜欢/不喜欢的图形对象的类型。例如......普通的状态帖子,这种方法非常有效。但是,我在尝试为带有消息/故事帖子对象的照片点赞时遇到了问题。事实证明,在这种带有照片的帖子对象的图表数据中,除了状态帖子图表数据中的普通“id”之外,还有一个名为“object_id”的附加参数。在这种情况下,对于照片和故事帖子,您需要传递“object_id”,不变以成功取消喜欢。

这种混乱似乎要么是 FB 端的错误,要么他们正在进行更改并禁止来自 graph api 的喜欢/不喜欢 & 只是忘记/还没有告诉我们:) 希望是前者。同时,您只需要使用我上面的答案,但只需确保您使用可以找到的尽可能多的不同类型的帖子对象进行测试,并在不同的 id (“id”的一部分)时使用 if 条件...“object_id”...等)是必需的。

于 2013-03-18T20:08:39.700 回答
0

有时Daniel McCarthy的方法行不通。在这种情况下,我们需要获取 Graph API 请求 XXX_YYYY,找到字段object_id与此 object_id 不同。

于 2013-04-28T20:48:45.467 回答