FBWebDialogs将本地图像添加到参数中

时间:2014-04-23 08:39:10

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

请在下面找到我的代码,在朋友的墙上分享

AppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
// if we don't have permission to announce, let's first address that
if ([appDelegate.session.permissions  indexOfObject:@"publish_actions"] == NSNotFound)
{
    NSArray *permissions =[NSArray arrayWithObjects:@"publish_actions",@"publish_stream",@"manage_friendlists", nil];

    [FBSession setActiveSession:appDelegate.session];

    [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends
                                          completionHandler:^(FBSession *session, NSError *error)
     {
         if (!error)
         {
             // have the permission
             [self poster];
         }
         else
         {
             UIAlertView *alertView = [[UIAlertView alloc]  initWithTitle:@"Error" message:error.localizedDescription                                                                                                delegate:nil                                                                                   cancelButtonTitle:@"OK" otherButtonTitles:nil];
             [alertView show];
         }
     }];
}
else
{
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   _friendId, @"to",
                                   @"text change", @"caption",
                                   @"Some Text", @"description",
                                   @"http://example.com/pic.png", @"picture",
                                   nil];
    [FBWebDialogs presentFeedDialogModallyWithSession:nil
                                           parameters:params
                                              handler:
     ^(FBWebDialogResult result, NSURL *resultURL, NSError *error)

     {
         //stuff
     }];
}

这很好用,但是当我尝试放置本地图片而不是图片网址时,应用程序崩溃了

[UIImage imageNamed:@"troll.png"], @"picture"

1 个答案:

答案 0 :(得分:1)

如果您阅读documentation -

  

picture :此帖子附带的图片的网址。图片必须至少为200px×200px。

因此,您无法将图片数据传递给Feed,只有指向该图片的链接才有效。

要解决此问题,您只需要2个选项 -

  1. 将图像保存到服务器,并生成链接并将此链接传递给picture参数。

  2. 使用\POST /photos在Facebook上传图片,然后在picture参数中使用其链接。 - 这不会检查“编辑-2”


  3. 编辑1: 获取图片链接 -

    [FBRequestConnection startWithGraphPath:@"/{photo-id}?fields=picture"
                             parameters:nil
                             HTTPMethod:@"GET"
                      completionHandler:^(
                          FBRequestConnection *connection,
                          id result,
                          NSError *error
                      ) {
                          /* handle the result */
                      }];
    

    (这可以忽略,因为facebook cdn图像无法在picture参数中使用。请选中“Edit-2”)

    编辑2:

    根据facebook的人 -

      
        供稿对话框不支持
    1. object_attachment
    2.   
    3. picture是修改帖子图片的正确方法。但是,您可以为此参数指定Facebook CDN 中的图片。
    4.   

    所以我猜你只剩下一个选项 - 在facebook以外的其他服务器上上传phorto,并在picture参数中使用该网址。