SLComposeViewController的setInitialText在View中没有显示出来。

11

我正在尝试使用SLComposeViewController在我的iOS应用程序中分享一个链接。

SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[controller setInitialText:@"Here's the link I promised:"];
[controller addURL:[NSURL URLWithString:@"http://www.url.com"]];
[self presentViewController:controller animated:YES completion:nil];
控制器出现时,输入框中没有文本。您可以添加文本并成功发送它(URL 也会在发布中正确显示)。
我刚刚安装了 FacebookSDK 4.01,这是一个 iOS 7/8 应用程序。
有任何关于为什么初始文本不显示的想法吗?我甚至尝试过不使用 URL,只使用文本,但是没有效果。
额外说明:如果我删除 addURL,则应用程序会在触摸“发布”按钮时冻结,并且帖子永远不会被发送。
谢谢任何帮助!!!

你知道不允许预填消息字段吗? - WizKid
这在以前总是有效的。如果不是为了那个,setInitialText会被用来做什么呢? - Michael Reiland
如果用户输入错误的文本,您可以进行更改。但是,不允许预先填写您编写的内容。请务必阅读Facebook政策,网址为https://developers.facebook.com/policy 2.3。 - WizKid
但是它仍然没有显示出来,无论文本来自哪里。 - Michael Reiland
用户是否在您的应用程序中编写文本?我的意思是,如果不允许编写,则没有理由尝试修复它。 - WizKid
显示剩余2条评论
2个回答

8
我找到了一个好的方法来解决这个问题,它仍然能够给用户带来控制。
仅适用于 Facebook,就在呈现 SLComposerViewController 之前,我会展示一个自动关闭的警告(如果没有点击“OK”,则关闭时间为6秒)。此警告将包含“写给你的朋友,让他们知道你玩得如何!\n\n你只需要复制预设消息。”。
在显示警告后,我使用以下内容向 UIPasteboard 发布预设消息:
    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    pasteboard.string = msg;

然后,SLComposeViewController被呈现并出现警告视图。一旦用户解除了警告视图(或6秒钟过去并且自动解除),用户可以选择将预设消息直接粘贴到消息文本中。或者不这样做,这就是它的美妙之处。

希望这可以帮助其他人绕过FB突然执行的规定。我甚至没有意识到使用setInitialText方法在FB上是违反政策的。

干杯。


1
你能否提供这段代码的完整代码块? - NoSixties

7

这种行为并不是预期的。SLComposeViewController 不知道 initial text 的值是硬编码字符串还是用户编写的。Facebook 在代码层面上没有强制执行此策略;如果他们发现您在应用程序中错误使用它,您将收到警告/拒绝权限。即 Set initialText 应该成功,除了 SLComposeViewController.h 中记录的情况。 - Patrick Goley
在苹果的文档中没有提到他们通过使 setInitialText 无法按预期函数来执行来强制执行此策略。正如Patrick所暗示的,如果用户输入的字符串被放置在那里作为初始文本,则可以接受。代码不知道你从哪里得到的字符串,因此无法有效地执行它。 - Michael Reiland
1
是的,如果这个策略在SLComposeViewController中被新实施,那么这将是苹果方面的问题。这在iOS 8.3中最近有所改变吗?不幸的是,我已经认真更新了我所有的设备,所以没有8.2可以尝试。在iOS 7上设置初始文本仍然有效。而且,在iOS 8.3模拟器上仍然有效!不知道这是否只是苹果方面的一个错误。 - Bruce Geerdes
这似乎是苹果的一个bug。只需删除Facebook应用程序,它就可以正常工作。苹果的bug?没错。 - Jonny

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