如果URL和图像都存在,Facebook SLComposeViewController URL将显示在正文中

时间:2012-10-12 21:08:20

标签: ios facebook ios6

使用SLComposeViewController时,如果图片和网址都存在,我会发现在发布到Facebook时的好奇行为。具体来说,如果您同时拥有图片和网址,则在SLComposeViewController的视图中,如果我执行以下操作,则会在initialText之后立即显示在Facebook帖子正文中:

SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

NSString *text = @"This is a test Facebook post with SLComposeViewController.";
NSURL *url = [NSURL URLWithString:@"http://http://stackoverflow.com/questions/12503287/tutorial-for-slcomposeviewcontroller-sharing"];
UIImage *image = ...;

[controller setInitialText:text];
[controller addURL:url];
[controller addImage:image];

[self presentViewController:controller animated:YES completion:nil];

这显然很麻烦,因为如果URL很长,则初始文本会从SLComposeViewController视图的可见部分推出,我只会看到网址的后半部分:

enter image description here

如果我重复这个过程,这次没有将图像添加到帖子中,URL的文本根本不会显示在正文中(即使它在线正确显示)。

enter image description here

底线,仅当有图像时,URL才会显示在帖子正文中。当我使用FBNativeDialogs时,我会看到相同的模式。

有没有办法用SLComposeViewController来阻止这种行为,这样我就可以将图像和URL连接到Facebook帖子而不会将用户暴露给网站冗长,丑陋的URL?很明显,我可以使用任何非SLComposeViewController解决方案(例如,设计我自己的用户界面来撰写Facebook帖子,使用Facebook已弃用的Feed Dialog等)。只是想知道我是否忽略了一些明显的SLComposeViewController解决方案。

3 个答案:

答案 0 :(得分:10)

最后,我放弃了SLComposeViewController(以及FBNativeDialogs)。它们呈现出一种很好的,整合的感觉,但鉴于我的帖子总是同时包含照片和URL,这实际上是行不通的。最重要的是,帖子没有正确归因于我的应用程序。

所以,最后,我编写了自己的用户界面,并按照here概述使用Facebook SDK 3.1 FBRequestConnection。我认为我们都必须制作自己的用户界面,因为本机用户界面存在缺陷,但实际情况就是如此。

答案 1 :(得分:6)

新的对话框似乎是围绕您设计的,将大部分共享数据作为标签提供给所提供链接指向的网站。像这样:

名称:

<title>TITLE</title>

说明

<meta name="description" content="DESCRIPTION">

图像:

<meta property="og:image" content="IMAGE_URL">

应用ID:

<meta property="fb:app_id" content="APP_ID">

这样您只需提供初始文本和URL。您可以查看官方Youtube应用程序如何以Facebook分享为例。

答案 2 :(得分:-5)

TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init];
NSString *format = @"“%@” %@ /via @DesignSceneApp";
NSString *message = [NSString stringWithFormat:format, title, url]
NSUInteger idx = title.length;
while (![twitter setInitialText:message]) {
    idx -= 5;
    if (idx > 5) {
        message = [NSString stringWithFormat:format,
            [NSString stringWithFormat:@"%@…", [title substringToIndex:idx]],
            url
        ];
    } else {
        // Give up on the title.
        message = [NSString stringWithFormat:@"%@ /via @DesignSceneApp", url];
        [twitter setInitialText:message];
        break;
    }
}

[self presentViewController:twitter animated:YES completion:nil];