SLServiceTypeFacebook setInitialText не работает

Я пытаюсь поделиться текстом на Facebook с помощью SLServiceTypeFacebook на IOS 8.3. Но всплывающее текстовое поле отображается пустым. Я хочу, чтобы он отображался с текстом в нем. Ниже вы можете увидеть код, который я использую для этого.

 if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) 
 {
       SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

       [controller setInitialText:@"First post from my iPhone app"];
       [self presentViewController:controller animated:YES completion:Nil];
  }

person birdcage    schedule 28.04.2015    source источник
comment
setInitialText возвращает YES или NO?   -  person jszumski    schedule 28.04.2015
comment
Это известная проблема в iOS 8.3: Грег Пирс (@agiletortoise) 27.04.15, 11:22 Ребята из UIKit: Новая проблема iOS 8.3 с [SLComposeViewController setInitialText]. rdar://20709403 openradar.appspot.com/radar?id=50611…   -  person Dean    schedule 28.04.2015
comment
@deanware, не могли бы вы прислать ссылку на это? Вы предлагаете мне дождаться новой версии iOS?   -  person birdcage    schedule 28.04.2015
comment
OpenRadar: openradar.appspot.com/radar?id=5061141176778752   -  person jszumski    schedule 28.04.2015
comment
возможный дубликат SLComposeViewController setInitialText не отображается в представлении   -  person MrCranky    schedule 03.06.2015
comment
Как уже упоминалось, Facebook больше не разрешает предварительное заполнение, что делает setInitialText контроллера SLComposeViewController для SLServiceTypeFacebook бесполезным. Однако для меня было очень полезно понять, что добавление URL-адреса или изображения по-прежнему вполне возможно и соответствует условиям обслуживания Facebook. Если у вас есть ресурсы для этого, например. веб-сервер для размещения сообщения — просто добавьте ссылку на веб-страницу, которую вы хотите, чтобы пользователь увидел. Facebook предварительно загрузит сводку этой страницы и все равно отобразит ее встроенной. Лучше, чем пытаться комментировать от имени пользователя.   -  person Integrating Stuff    schedule 14.09.2015


Ответы (3)


Кажется, возникла проблема с установкой последнего обновления приложения Facebook (v29). Его удаление «исправляет» проблему.

https://developers.facebook.com/bugs/1632385646995079/ https://developers.facebook.com/bugs/962985360399542/

Обновление (3 июня 2015 г.)

Хорошо. Кажется, новая политика Facebook гласит, что предварительное заполнение сообщения через setInitialText: является нарушением предварительного заполнения.

https://developers.facebook.com/docs/apps/review/prefill

Так что я думаю, что единственный способ делиться контентом с этого момента — это FBSDKShareDialog

https://developers.facebook.com/docs/sharing/ios

person nnarayann    schedule 29.04.2015
comment
Кажется странным, что установка стороннего приложения (Facebook) может сломать собственный SLComposeViewController. Но я могу подтвердить, что это действительно происходит, даже с последним обновлением приложения (v30). - person Mr. Zystem; 27.05.2015
comment
Та же проблема возникает и в Facebook v31. Пожалуйста, дайте мне некоторое предложение в этом. - person Siddharth; 28.05.2015
comment
Я не думаю, что Apple собирается отказаться от этого SLComposeViewController. Какое-то правильное решение для этого все еще ждет. Я лично не хочу реализовывать FBSDKShareDialog, так как это займет много часов, например, настройку, инициализацию кода, интеграцию SDK и т. д. SLCompose...Controller требует всего 4-5 строк кода. - person Paresh Thakor; 06.07.2015
comment
Это правильно, что Apple с новой iOS 9 имеет новый SDK Facebook, в котором setInitialText устарел. То же самое и с инстаграмом. Вы не можете программно добавлять предопределенные комментарии в оба этих приложения. - person Dharmesh Siddhpura; 21.09.2015
comment
Устарело в iOS9? Где ты это видишь? В текущих документах не сказано, что он устарел. Пока еще не работает. Я с @Mobihunterz здесь - это просто настоящая головная боль. - person Jonny; 06.10.2015
comment
setInitialText НЕ устарел для iOS 9, поскольку он по-прежнему работает для Twitter и других социальных платформ. Что касается яблока. . . имеет новый Facebook SDK. . ., это тоже неправда. Они все еще используют социальную структуру. Меня тоже беспокоит эта внезапная перемена взглядов на Facebook. :/ РЕДАКТИРОВАТЬ: Личный опыт работы с собственным SDK Facebook не был забавным... и я не рекомендую его, если вам ТОЛЬКО нужна поддержка обмена. - person Erik Bean; 16.10.2015
comment
@ErikBean Я думаю, что должна быть возможность создать свое собственное представление на основе SLComposeViewController, которое использует структуру Social, что позволит вам предварительно заполнить текст. Единственная проблема, которую я вижу в этом, заключается в том, что для этого требуется ключ API от Facebook, и они отклонят ключ API, когда увидят, что ваше приложение может предварительно заполнить текст :( - person Supertecnoboff; 04.05.2016
comment
Нет, Facebook автоматически считает это нарушением своих Условий и положений, и ВСЕ Dev Ops с FB прекращаются. Ваша страница FB также может быть закрыта, если вы использовали ее для тестирования, поскольку вы использовали свою страницу для нарушения Условий. Apple также отклонит ваше приложение за нарушение раздела 8.5 процедуры проверки App Store. - person Erik Bean; 09.06.2016

Должен любить эффективность Facebook. Я немного опоздал с этим, но может помочь кому-то.

#import <FBSDKShareKit/FBSDKShareKit.h>

FBSDKShareLinkContent  *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = self.urlForSocialMedia;
content.contentDescription = self.textForFB;
content.contentTitle = @"Results.";

[FBSDKShareDialog showFromViewController:self
                             withContent:content
                                delegate:self];
person PhillipOReilly    schedule 28.08.2015
comment
Почему вы создаете диалог и потом им не пользуетесь?!? В конце вы используете FBSDKShareDialog showFromViewController для создания и отображения диалогового окна. - person Freddy; 12.10.2015
comment
Я бы предположил, что FBSDKShareDialog должен быть просто диалогом в конце. - person Jake T.; 12.11.2015
comment
Три точки в начале этого поста дадут мне почти столько же времени, сколько я потратил на создание самого приложения! - person Farhad Malekpour; 31.12.2015

Перед setInitialText добавьте # перед этим тестом. Код ниже. Это работает для меня

SLComposeViewController *mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

    [mySLComposerSheet setInitialText:@"#myInitialTextIsHere"];
    [mySLComposerSheet addURL:[NSURL URLWithString:strURL]];

    [mySLComposerSheet setCompletionHandler:^(SLComposeViewControllerResult result) {

        switch (result) {
            case SLComposeViewControllerResultCancelled:
                NSLog(@"Post Canceled");
                break;
            case SLComposeViewControllerResultDone:
                NSLog(@"Post Sucessful");
                break;

            default:
                break;
        }
    }];

    [self presentViewController:mySLComposerSheet animated:YES completion:nil];
person Parveen Akter    schedule 07.05.2018