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