Facebook iOS SDK 3.0,在网址上实现类似操作?

时间:2012-08-24 16:00:24

标签: iphone objective-c facebook facebook-graph-api facebook-ios-sdk

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

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

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

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 个答案:

答案 0 :(得分:6)

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

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

你知道当Facebook分享喜欢时,网址会是什么样子。它必须具有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的响应被记录下来,所以实际上可以看到是否通过了。

可能会有一些性能改进可以通过实际请求完成,但如果您发现任何减速,我会留给您。

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

答案 1 :(得分:2)

我们目前不支持使用我们的Graph API。 您可以看到的是这样的事情: https://developers.facebook.com/docs/opengraph/actions/builtin/likes/

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

也许只是这个?

    FBRequest *requestLike = [[FBRequest alloc]initForPostWithSession:[FBSession activeSession]
    graphPath:@"me/og.likes"
    graphObject:[NSURL URLWithString:facebookLike.titleLabel.text]];