4

我正在尝试从应用程序实现类似页面的功能,我添加了最新Facebook SDK的并实现了所有委托和处理程序来检查用户登录到应用程序的会话和状态。它工作正常到这里(这已经在示例代码中完成)。无论如何,我从 Facebook 开发者网站上找到了以下代码来点赞一个页面,但它似乎不起作用。

- (void) likeFacebookIndia
{
    NSMutableDictionary<FBGraphObject> *action = [FBGraphObject graphObject];
    action[@"object"] = @"http://www.facebook.com/FacebookIndia";
    //action[@"object"] = @"FacebookIndia";
    [FBRequestConnection startForPostWithGraphPath:@"me/og.likes"
                                       graphObject:action
                                 completionHandler:^ (FBRequestConnection *connection,
                                                     id result,
                                                     NSError *error)
     {
         // handle the result
         if(error)
         {
             NSLog(@"%@",error.localizedDescription);
         }
         else
         {
             NSLog(@"%@",result);
         }
     }];
}

一旦成功登录,我曾经调用上面的函数,它最终在likeFacebookIndia块中出现以下错误,

操作无法完成。(com.facebook.sdk 错误 5。)

在这里,我的问题是,

  1. 我不确定这是否是喜欢页面的正确方法?

  2. 如果它是正确的,那么我真的错过了什么?

  3. 还有其他方法吗?

我已经访问了页面,FacebookLikeView并且FBLikeButton在这里已经提出了许多问题,但似乎没有一个适用于最新Facebook SDK更新。我可以喜欢一个页面,FacebookLikeView但是有很多问题,

  1. AUIKeyBoard在喜欢页面后出现
  2. 如果需要登录,花时间加载 Facebook 页面,并且
  3. 第二次点赞到同一页面后,点赞视图消失在某个地方!

更新 我在 Graph API Explorer 上测试了同样的东西,结果如下,

图形 API 资源管理器

{ "error": { "message": "(#100) Like actions are not yet supported against objects of this type.", "type": "OAuthException", "code": 100 } }

更新 2

我确实闯入了FacebookLikeView课程并解决了我编写的上述问题,尽管它现在应该可以工作了吗?不,它不起作用,因为它正在使用FBConnect现在已经过时的东西,而且我最新Facebook SDK的其他东西工作得很好!如果有人用最新的 SDK for FacebookLikeView 制作新项目,那就太好了。【我已经在工作了!】

我就是这样的

//Calling this function in `viewDidLoad`

- (void) addLikeView
{
    facebookLikeView.delegate = self;
    facebookLikeView.href = [NSURL URLWithString:@"http://www.facebook.com/FacebookIndia"];
    facebookLikeView.layout = @"button_count";
    facebookLikeView.showFaces = NO;
    facebookLikeView.alpha = 0;
    [facebookLikeView load];
}

#pragma mark - Facebook Delegate
-(void)sessionDoneForPageShare:(FBSession *)session state:(FBSessionState)state error:(NSError *)error
{        
    if(error)
    {
        NSLog(@"error : %@",error);
    }
    else
    {
        [facebookLikeView load]; //In logged in or logged out, we've to call this
    }
}

- (void)facebookViewControllerCancelWasPressed:(id)sender
{
    NSLog(@"Login was cancelled by user");
}

- (void)facebookViewControllerDoneWasPressed:(id)sender
{
    NSLog(@"User tapped done button on login view");
}

- (void) checkFBloggedInStatus
{
    if (!FBSession.activeSession.isOpen)
    {
        NSArray *permissions = [NSArray array];
        [FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceOnlyMe allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error){
            [self sessionDoneForPageShare:session state:status error:error];}
         ];
    }
}

#pragma mark FacebookLikeViewDelegate methods
- (void)facebookLikeViewRequiresLogin:(FacebookLikeView *)aFacebookLikeView {
    [self checkFBloggedInStatus];
}

- (void)facebookLikeViewDidRender:(FacebookLikeView *)aFacebookLikeView {
    [UIView beginAnimations:@"" context:nil];
    [UIView setAnimationDelay:0.5];
    facebookLikeView.alpha = 1;
    [UIView commitAnimations];
}

- (void)facebookLikeViewDidLike:(FacebookLikeView *)aFacebookLikeView {
    NSLog(@"liked");
}

- (void)facebookLikeViewDidUnlike:(FacebookLikeView *)aFacebookLikeView {
    NSLog(@"unliked");
}

- (void)facebookLikeView:(FacebookLikeView *)aFacebookLikeView didFailLoadWithError:(NSError *)error
{
    NSLog(@"FacebookLikeView error: %@",error);
}

有了这个,我可以看到like按钮,可以登录浏览器,但是什么也不会发生!它每次都会显示Like按钮!

这在旧 SDK 上运行良好FBConnect,问题出在最新版本Facebook SDK上,你可以在FacebookLikeView 这里找到,

我错过了什么?

4

2 回答 2

4

大更新!

如果您看到这意味着,现在您不需要在应用程序中修补(或破解)任何支持(如 Facebook 上的页面或任何 Open Graph 对象)的东西。随着 Facebook iOS SDK (FacebookSDK.framework) 的最新版本,他们支持类似按钮,但是(在我编写此更新时)它在beta,但我们有一些我们长期以来一直希望的东西,谢谢 Facebook .

这是更改日志和喜欢按钮的直接链接,也是文档。

解决方案: [推荐]

Like 按钮可用于为 Facebook 主页或任何 Open Graph 对象点赞,并可通过 URL 或 ID 引用。代码如下所示:

FBLikeControl *like = [[FBLikeControl alloc] init];
like.objectID = @"http://shareitexampleapp.parseapp.com/photo1/";
[self addSubview:like];

在此处输入图像描述

(来源:文档)。


老派的方式[不推荐]

最后,我能够解决我的问题,我正在提出解决步骤,所以它对正在寻找这种东西的人真的很有帮助,

您可能需要知道的一些事情(来自我的问题)

  • 我在我的应用程序中同时使用 FBConnect 和 Facebook SDK。
  • 两者都工作正常,FBConnect 仅用于FacebookLikeView- 您需要将 FBRequest 类替换为 FBConnect 中的其他名称,这样它就不会与最新的 SDK 冲突。
  • 仍然需要一些简单快捷的解决方案,因为这不是完美的解决方案。

所以我们开始,

您如何知道用户是否喜欢此特定页面?

您需要使用 Graph API 并检查用户的喜欢。这是一个例子。

https://graph.facebook.com/{USER_ID}/likes/{PAGE_ID}

如果用户喜欢相关页面,如果用户喜欢该页面,它将返回如下所示的 JSON。

{
  "data": [
    {
      "name": "SomeCafe", 
      "category": "Restaurant/cafe", 
      "id": "someIdWillCome", 
      "created_time": "2013-05-07T12:32:00+0000"
    }
  ], 
  "paging": {
    "next": "https://graph.facebook.com/me/likes/someIdWillCome?format=json&limit=5000&offset=5000&__after_id=someIdWillCome"
  }
}

如果用户不喜欢该页面,就像这样:

{
  "data": [
  ]
}

这是关于用户喜欢的文档: https ://developers.facebook.com/docs/reference/api/user/#likes

执行

1)FacebookLikeView按照其文档中的规定实施。

2)我需要实现一个 HTTP 请求来调用上面的 URL 来检查该页面的当前状态,因为我无法从FacebookLikeView. 请记住,您需要与 access_token 一起执行 GET 请求。

3)检查响应(接近上面的例子)并做你需要的事情!

就是这样!

这是FacebookLikeView我遇到的问题的解决方案


1)FacebookLikeView去了某个地方?

这是因为评论弹出框隐藏了它!下面是解决方案

FacebookLikeView.m课堂上寻找,并在最后- (void)didObserveFacebookEvent:(NSString *)fbEvent 添加这些行,

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0f)
{
    //NS_AVAILABLE_IOS(5_0);
    [[_webView scrollView] setContentOffset: CGPointMake (0, 0)];
}

2) FacebookLikeView 显示 UIKeyboard!!

这是因为评论文本框焦点在像页面之后,下面是解决方案。

- (void) keyboardWasShown:(NSNotification *)notification
{
    //force hide UIKeyBoard
    [self.view endEditing:YES];
}

将通知添加到viewDidLoad您实施的类中

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];

这将放弃从该特定视图可见的所有键盘,在我的情况下UITextField,我不需要 Facebook Like 按钮,所以如果你的情况不同,那么请确保这一点。

3)加载缓慢的问题取决于 Facebook 服务器、互联网连接或其他方面的许多因素,所以我在其中添加了一个加载指示器——这需要一些时间,但可以按我的意愿工作!


这将允许我喜欢/不像 Facebook 页面,我也能够知道该特定用户的当前状态,以便我可以决定做什么!

最后,感谢所有检查此问题并回复我的人!赞赏!:)

于 2013-05-13T12:04:08.397 回答
1

很抱歉告诉您坏消息,但您不能代表用户点赞主页。您可以代表用户点赞帖子、评论和照片,但不能代表页面点赞(您提到的点赞视图也是如此)。如果您尝试执行后者,您将收到错误消息

"message": "(#3) 应用程序没有能力进行这个 API 调用。"

但好消息是您可以通过使用将加载到 UIWebView 中的 iFrame 来做到这一点。目前,这是在本机应用程序中集成类似PAGE按钮的唯一解决方案。如需进一步阅读,您可以查看此资源:http ://www.raywenderlich.com/1626/how-to-post-to-a-users-wall-upload-photos-and-add-a-like-button- from-your-iphone-app 在那里你可以找到一个部分

向您的 Facebook 粉丝页面添加“赞”按钮

希望这会帮助你。

于 2013-05-10T15:20:41.913 回答