О "SLComposeViewController" в бета-версии iOS 11

В моем проекте я всегда использую SLComposeViewController для обмена контентом со сторонними приложениями, но теперь, когда я обновляю свой iPhone до бета-версии iOS 11, это больше не работает.

SLComposeViewControllerCompletionHandler всегда SLComposeViewControllerResultCancelled.

Почему это?

Ответ 1

У меня возникли проблемы с SLComposer в iOS 11. Но я просто удалил строку, которая проверяет и, по-видимому, собственный SDK делает validacoes для меня внутренне.

Удалить эту строку для любого SLServiceType:

if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {

Итак, разработайте свою логику. В моем случае:

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

Надеюсь, я помог!

Ответ 2

iOS 11 удалил доступ к сторонним учетным записям (например, Facebook и Twitter) через приложение "Настройки". Im в настоящее время борется с тем же.

Теперь вы должны интегрировать функциональность с SDK от третьего лица. В Twitter есть страница миграции здесь о шагах, которые нужно предпринять: -

https://dev.twitter.com/twitterkit/ios/migrate-social-framework

Я еще не нашел конкретных инструкций о том, как переносить другие социальные сети, но можно с уверенностью сказать, что это потребует их SDK сторонних разработчиков.

Нет более легкого совместного использования в социальных сетях: - (

Ответ 3

Для iOS 11 эта строка:

 ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) 

всегда возвращает NO

Я заменил его на проверку, если у пользователя установлено приложение Facebook:

static NSString *const canOpenFacebookURL = @"fbauth2";

+ добавив его к LSApplicationQueriesSchemes в plist

-(BOOL)isFacebookAppInstalled {
    NSURLComponents *components = [[NSURLComponents alloc] init];
    components.scheme = canOpenFacebookURL;
    components.path = @"/";
    return [[UIApplication sharedApplication]
            canOpenURL:components.URL];
}

А затем просто позвоните SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

как обычно, то же, что и описанный Матхеем Домингосом. Но с этой проверкой, по крайней мере, вы знаете, что у пользователя установлено приложение facebook.