7

我正在尝试使用 Facebook iOS SDK 3.0 通过 facebook open-graph-api 实现 Like。除了 FbGraphObject 之外,一切似乎都正常工作,那是因为我不知道它应该是什么样子,因为这显然不起作用。

我想要做的是喜欢一个作为对象发布的 url。一个简单的 Like with 通过开放图。

我得到以下代码的错误消息是:

The action you're trying to publish is invalid because it does not specify any 
reference objects. At least one of the following properties must be specified: object.

我使用的代码是这样的:

    FBGraphObject *objectToLike = [[FBGraphObject alloc]initWithContentsOfURL:[NSURL URLWithString:facebookLike.titleLabel.text]];

    FBRequest *requestLike = [[FBRequest alloc]initForPostWithSession:[FBSession activeSession] graphPath:@"me/og.likes" graphObject:objectToLike];

    FBRequestConnection *connection = [[FBRequestConnection alloc] init];
    [connection addRequest:requestLike
         completionHandler:
     ^(FBRequestConnection *connection, id result, NSError *error) {
         if (!error &&
             result) {

             DLog(@"NothingWentWrong");
         }

         DLog(@"MajorError: %@", error);

     }
     ];

    [connection start];

更新:

检查了更多信息,我猜它使用此方法: https ://developers.facebook.com/docs/sdk-reference/iossdk/3.0/class/FBGraphObject/#//api/name/graphObject

以某种方式创建一个对象。这是我可能需要使用的 graphObject 方法。任何帮助将不胜感激。

4

4 回答 4

6

我实际上已经设法为此创建了一个简单且非常肮脏的解决方案。该解决方案似乎不是最佳解决方案,但它目前是一个可行的解决方案。

如果有人在这个网址上使用过 Facebook 上的资源管理器工具: https ://developers.facebook.com/tools/explorer/

你知道当 facebook 分享一个赞时 URL 的样子。它必须具有 URL 和访问令牌。因此,我的解决方案变成了忽略从 Facebook SDK 发送任何内容,而只是将发布请求发送到我在资源管理器工具中使用的相同 URL。

如果您仔细观察,在 facebooks 文档中似乎有一些引用它,但没有人准确解释如何实际建立连接,所以这是我的解决方案:

NSString *urlToLikeFor = facebookLike.titleLabel.text;

NSString *theWholeUrl = [NSString stringWithFormat:@"https://graph.facebook.com/me/og.likes?object=%@&access_token=%@", urlToLikeFor, FBSession.activeSession.accessToken];
NSLog(@"TheWholeUrl: %@", theWholeUrl);

NSURL *facebookUrl = [NSURL URLWithString:theWholeUrl];

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:facebookUrl];
[req setHTTPMethod:@"POST"];

NSURLResponse *response;
NSError *err;
NSData *responseData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&err];
NSString *content = [NSString stringWithUTF8String:[responseData bytes]];

NSLog(@"responseData: %@", content);

如果您查看代码,我只需获取 url 并将两个动态字符串放入 url,一个带有 object-url,一个带有访问令牌。我创建了一个 URLRequest 并使其成为一个 POST 请求,并且来自 facebook 的响应被记录下来,因此人们实际上可以看到类似的事情是否通过。

实际请求可能会进行一些性能改进,但如果您发现任何减速,我将由您决定。

我仍然对其他解决方案感兴趣,但这是我现在将使用的解决方案。

于 2012-08-31T09:18:19.367 回答
2

我们目前不通过我们的 Graph API 支持 Like。你可以看到的是这样的: https ://developers.facebook.com/docs/opengraph/actions/builtin/likes/

于 2012-08-30T22:51:29.783 回答
0

我不确定是什么initWithContentsOfURL,但从名称我猜它会尝试从给定的 URL(?)实际加载内容。

您只需将 URL 作为文本参数提供 - URL代表 Open Graph 对象Facebook 将完成剩下的工作,抓取该 URL 后面的页面并读取它的 OG 元标记等。

于 2012-08-27T08:31:37.757 回答
0

也许只是这个?

    FBRequest *requestLike = [[FBRequest alloc]initForPostWithSession:[FBSession activeSession]
    graphPath:@"me/og.likes"
    graphObject:[NSURL URLWithString:facebookLike.titleLabel.text]];
于 2012-08-29T08:07:44.983 回答