2013-02-08 114 views
1

我在我的应用程序中有一个方法,允许用户“喜欢”他/她的新闻提要中的帖子。这是通过使用HttpMethod.POST的简单图形请求完成的。但是,当我尝试做使用HttpMethod.DELETE的“不像”的行动,我得到一个错误回调:Facebook Graph API不像喜欢的帖子

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的整合所有的应用程序看对话和风格,但我可能是错的。下面是我有可疑roadmap post

删除通过图形API张贴到墙上的朋友,我们将 删除通过图形API 张贴到用户的朋友的墙壁的能力的能力。具体而言,针对[user_id]/feed的帖子,其中[user_id]为 不同于会话用户,或者stream.publish呼叫,其中 target_id用户与会话用户不同,将会失败。如果您想让人们张贴到他们的朋友的时间表,请调用 供稿对话框。包含朋友的故事通过用户提及标记或 动作标记将显示在朋友的时间轴上(假设朋友批准标记 )。欲了解更多信息,请参阅此博客文章。

任何想法,我可能做错了,还是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(); 
+0

似乎对我来说工作得很好。除此之外,我正在使用较旧的SDK V 2.x.我昨天在一个问题上发布了一个关于喜欢和“不喜欢”评论的答案:http://stackoverflow.com/a/14749927/450534。看看它是否适合你。你将不得不改变评论的具体部分,但代码是相同的帖子以及评论。 –

+0

它似乎是基于错误代码的权限问题,但我拥有publish_stream权限集。 – Wenger

+0

您是否在图形浏览器中尝试过确切的请求? https://developers.facebook.com/tools/explorer您描述的场景应该可行。 –

回答

1

当您从图表数据中获取帖子ID时,它的格式应该是:XXXXX_YYYYY。 XXXXX仅仅是用户ID,YYYYY是实际的帖子ID。你需要做的是提取并使用图形给你的帖子ID的YYYYY部分。所以,而不是graph.facebook.com/XXXXX_YYYYY/likes ....你想发送graph.facebook.com/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结束的一个bug,或者他们正在改变并且不允许图表api &中的喜欢/不喜欢,只是忘记了/还没有告诉我们:)希望前者。与此同时,你只需要使用我的上面的答案,但只要确保使用可找到的许多不同类型的后期对象进行测试,并在条件不同时使用不同的id(部分“id” ...“object_id”等)是必需的。

+0

这有点合理。我今晚必须尝试。谢谢! – Wenger

+0

对。 “object_id”是您获取高分辨率数据以及链接到指定帖子的照片的其他详细信息的地方。我想这是有道理的,然后用它来代替帖子ID。 – Wenger

+0

@Wenger是的,但取决于你所做的是什么,有很多对象只有“id”而没有“object_id”......我一直在使用上面的条件来优先获取“object_id”&回退到提取“id”的有用部分,到目前为止它已经完美运行。让我知道这是否有效,当你有机会检查。 –

0

有时丹尼尔麦卡锡的方法不起作用。在这种情况下,我们需要获取图形API请求XXX_YYYY,找到字段object_id,而不像这个object_id fid。

相关问题