SLServiceTypeFacebook setInitialText无法正常工作。

46
我正在尝试通过IOS 8.3上的SLServiceTypeFacebook分享文本。但弹出的文本框显示为空。我希望它能显示文本。下面是我用于此的代码。

我正在尝试通过IOS 8.3上的SLServiceTypeFacebook分享文本。但弹出的文本框显示为空。我希望它能显示文本。下面是我用于此的代码。

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

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

setInitialText 返回 YES 还是 NO - jszumski
5
这是iOS 8.3已知的问题:"Greg Pierce (@agiletortoise) 4/27/15, 11:22 AMUIKit专家们:[SLComposeViewController setInitialText]存在新的iOS 8.3问题。rdar://20709403 openradar.appspot.com/radar?id=50611… - Dean
@deanware,你能发一下那个链接吗?你建议我等新的iOS版本吗? - birdcage
2
OpenRadar: http://openradar.appspot.com/radar?id=5061141176778752 - jszumski
正如其他人已经提到的,Facebook不再允许预先填写,这使得SLComposeViewController的“setInitialText”对于SLServiceTypeFacebook无用。 然而,对我非常有用的是意识到添加网址或图像仍然是完全可能的,并且符合Facebook的服务条款。 如果您有资源可以这样做,例如托管帖子的Web服务器-只需添加指向您想要用户查看的网页的链接。 Facebook将预取此页面的摘要并嵌入显示。比试图代表用户发表评论更好。 - Integrating Stuff
3个回答

32

最近更新Facebook的应用程序(v29)好像出现了问题,卸载这个版本可以“修复”问题。

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

更新(2015年6月3日)

嗯,看来新的Facebook政策指出通过setInitialText:预填消息是一种预填违规行为。

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

所以我想从现在开始分享内容的唯一方法就是使用FBSDKShareDialog了。

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


1
安装第三方应用程序(Facebook)会破坏本地的SLComposeViewController,这似乎很奇怪。但我可以确认,即使使用最新的应用程序更新(v30),这确实正在发生。 - hotdogsoup.nl
在Facebook v31中也出现了同样的问题。请给我一些建议。 - Siddharth
1
我认为苹果不会废弃那个SLComposeViewController。对于这个问题,仍有一些适当的解决方案在等待中。我个人不想实现FBSDKShareDialog,因为它将需要大量时间,例如配置、代码初始化、SDK集成等。SLCompose...Controller只需要4-5行代码。 - Paresh Thakor
1
苹果的新iOS 9中有新的Facebook SDK,其中setInitialText已被弃用,这是正确的。Instagram也是同样的情况。您无法在这两个应用程序中以编程方式添加预定义的评论。 - Dharmesh Siddhpura
2
setInitialText在iOS 9中并未被弃用,因为它仍然适用于Twitter和其他社交框架服务。至于“苹果...有新的Facebook SDK...”这是不正确的。他们仍在使用Social框架。而Facebook的这种“突然”变化也给我带来了不便。:/编辑:个人对Facebook自己的SDK的经验并不愉快...如果你只需要分享支持,我不建议使用它。 - Erik Bean
显示剩余3条评论

1

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

为什么你创建了一个对话框却没有使用它?最终你使用FBSDKShareDialog showFromViewController来创建和显示对话框。 - Freddy
我想象中,FBSDKShareDialog 应该只是一个对话框。 - Jake T.
1
在这篇文章开头的三个点几乎花费了我创建这个应用程序本身所花费的同样的时间! - Farhad Malekpour

0

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

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