关于iOS 11 beta中的"SLComposeViewController"

17

在我的项目中,我经常使用 SLComposeViewController 来与第三方应用程序共享内容,但现在,当我将iPhone更新到iOS 11 beta时,这不再起作用。

SLComposeViewControllerCompletionHandler 总是回调 SLComposeViewControllerResultCancelled

为什么会这样?

3个回答

20

在iOS 11中,我遇到了关于SLComposer的问题。但我只是删除了检查行,显然SDK会在内部为我进行有效性验证。

删除此行适用于任何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];

我希望我已经帮到您了!


这个可以运行 - 如果用户没有登录,那么作曲家仍然会弹出,但是接着会显示一个“您需要登录”的警告。 - davedavedave
1
当将部署目标设置为iOS11时,这个解决方案是否适用于模拟器中的用户(iPhone)?它不会崩溃或出现任何问题,但我没有像iOS10及以下版本那样获得操作表,并且在控制台中显示“ViewDidAppear,但远程VC失败,正在解除”,以及“Sheet not being presented, calling premature completion”? - Louis Leung
1
我仍然在使用Twitter,如下所示。运行在iPad Air和iOS 11.2.2上。 - dodgy_coder
1
@matheus 这并不适用于领英,有其他方法吗? - Satheeshkumar Naidu
你是怎么做的? - Matheus Domingos

13

iOS 11在设置应用中删除了对第三方账户(如Facebook和Twitter)的访问权限。我目前也在为同样的问题苦恼。

现在你必须使用第三方提供的SDK来集成功能。Twitter在这里有一个迁移页面,介绍了需要采取的步骤:

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

我尚未找到关于如何迁移其他社交网络的具体指令,但可以肯定需要他们的第三方SDK。

没有更多简单的即插即用社交分享了 :-(


2
SLComposeViewController对我来说很正常,就像以前一样。请查看Matheus发布的答案。 - Leon
不幸的是,自回答之时起,Twitter已经停止了对Twitter Kit的支持,这意味着现在更难以实现与Twitter的简单最佳实践的集成:https://blog.twitter.com/developer/en_us/topics/tools/2018/discontinuing-support-for-twitter-kit-sdk.html。 - TheNeil
看起来Twitter的API端点现在是预期的替代品:https://developer.twitter.com/en/docs/tweets/post-and-engage/overview - TheNeil

6

iOS 11中的这行代码:

 ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) 

一直返回NO

我用检查用户是否安装了Facebook应用程序替换了它:

static NSString *const canOpenFacebookURL = @"fbauth2";

+ 将其添加到plist文件中的LSApplicationQueriesSchemes
-(BOOL)isFacebookAppInstalled {
    NSURLComponents *components = [[NSURLComponents alloc] init];
    components.scheme = canOpenFacebookURL;
    components.path = @"/";
    return [[UIApplication sharedApplication]
            canOpenURL:components.URL];
}

然后就像Matheus Domingos所描述的那样,只需要调用SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];即可。

但是,使用这个检查至少可以知道用户已经安装了Facebook应用程序。


1
这个可以运行,但是它是否“安全”?为什么SLServiceType常量已被弃用,但SLComposeViewController没有?为什么这仍然可以工作? :) - Thomas Clowes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接