URL-адрес Facebook SLComposeViewController отображается в теле, если оба URL и изображение присутствуют

Используя SLComposeViewController, я замечаю любопытное поведение при публикации в Facebook, если присутствуют как изображение, так и URL. В частности, если у вас есть изображение и URL, URL-адрес появляется в теле сообщения Facebook в представлении SLComposeViewController, сразу после initialText, если я делаю следующее:

SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

NSString *text = @"This is a test Facebook post with SLComposeViewController.";
NSURL *url = [NSURL URLWithString:@"http://http://stackoverflow.com/info/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, и я вижу только последнюю часть URL-адреса:

enter image description here

Если я повторю этот процесс, на этот раз не добавляя изображение в сообщение, текст URL-адреса обычно не отображается в теле вообще (даже если он отображается правильно в Интернете).

enter image description here

Нижняя строка, только если есть изображение, и URL-адрес показывает URL-адрес в теле сообщения. И я вижу эту же схему, когда я использую FBNativeDialogs.

Есть ли способ остановить это поведение с помощью SLComposeViewController, чтобы у меня было как изображение, так и URL-адрес, подключенные к сообщению Facebook, не подвергая пользователя длинному URL-адресу, уродливому URL-адресу? Ясно, что я могу использовать любое из решений SLComposeViewController (например, создать собственный собственный пользовательский интерфейс для составления сообщения Facebook, используя устаревший Диалог каналов, и т.д.). Просто интересно, не забываю ли я о каком-то очевидном решении SLComposeViewController.

Ответ 1

В конце концов, я отказался от SLComposeViewController (а также FBNativeDialogs). Они представляют приятное интегрированное чувство, но, учитывая, что мои сообщения неизменно включают в себя как фотографию, так и URL, это действительно не работает. Кроме того, сообщения не были правильно отнесены как от моего приложения.

Итак, в конце концов, я написал свой собственный пользовательский интерфейс и использую SDK для Windows 3.1 FBRequestConnection, как описано здесь. Я думаю, что это немного глупо, что мы все должны сделать свой собственный интерфейс, потому что слабые стороны в пользовательском интерфейсе, но это то, что есть.

Ответ 2

Новый диалог, по-видимому, разработан вокруг вас, предоставляя большую часть данных общего доступа в виде тегов на веб-сайте, на который указывает ссылка. Вот так:

Название:

<title>TITLE</title>

Описание:

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

Изображение

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

Идентификатор приложения:

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

Таким образом вам нужно только указать исходный текст и URL-адрес. Вы можете посмотреть, как официальное приложение Youtube использует его для обмена на Facebook.

Ответ 3

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];