问题 SLComposeViewController setInitialText未显示在View中


我正在尝试使用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也会在Post中正确显示)。

我刚刚安装了FacebookSDK 4.01,它是iOS 7/8应用程序。

关于为什么初始文本没有出现的任何想法。我甚至试图在没有URL的情况下这样做,只是做文本,但没有。

附加说明:如果我删除了addURL,那么当我点击“发布”时该应用程序会冻结,并且该帖子永远不会被发送。

谢谢你的帮助!!!


5795
2018-04-30 14:42


起源

您知道不允许预先填写消息字段吗? - WizKid
这总是起作用。那么setInitialText会用于什么呢? - Michael Reiland
如果用户输错了文本,则可以设置它。永远不允许用你写的东西预填充它。你应该阅读Facebook政策 developers.facebook.com/policy 2.3 - WizKid
好的,所以,再一次。什么是setInitialText意味着用于那么? - Michael Reiland
要填写用户在应用中其他位置的表单中编写的文本 - WizKid


答案:


我找到了解决这个问题的好方法,它仍然可以让用户控制。

仅限Facebook,在呈现SLComposerViewController之前,我会显示一个自解雇警报(如果没有点击,则会解雇6秒)。此警报将包含“写信给你的朋友,告诉他们你是如何玩的!\ n \ n你只能用PASTE来预设信息。”

在显示警报后,我然后使用以下内容将预设消息发布到UIPasteboard:

    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
    pasteboard.string = msg;

然后呈现SLComposeViewController并在其上方显示警报视图。一旦用户解除警报视图(或6秒钟并且自行解除),用户可以选择在消息文本中直接粘贴预设消息。或者不是,这就是它的美丽。

希望这有助于其他人绕过FB决定突然强制执行的操作。我甚至没有意识到对FB使用setInitialText方法是违反政策的。

干杯。


8
2018-05-24 21:48



你可能为此提供整个代码块吗? - NoSixties


此行为是有意的。另见此错误报告: https://developers.facebook.com/bugs/962985360399542/。正如@WizKid所提到的那样,预先填写文本是违反政策的。直到最近,你仍然可以这样做(违反政策),但现在实际上已经实施了。

你无能为力;这是Facebook的政策执行。

另外,相关的Rdar: http://openradar.appspot.com/20709403


7
2018-05-04 03:54



此行为无意。 SLComposeViewController不知道初始文本的值是否是硬编码字符串,或者是否由用户编写。 Facebook不会在代码级别强制实施此政策;如果他们发现您在应用中使用不当,您将收到警告/ Facebook拒绝您的权限。即,除了SLComposeViewController.h中记录的情况之外,Set initialText应该成功 - Patrick Goley
Apple的文档中没有任何内容表明他们通过使setInitialText无法正常用于Facebook来强制实施此政策。正如帕特里克所说,如果用户输入的字符串作为初始文本放在那里就没问题。代码不知道你从哪里得到字符串,所以它实际上无法有效地强制执行它。 - Michael Reiland
是的,如果在SLComposeViewController中新实施此策略,那么它将在Apple的一侧。这最近是否因iOS 8.3而改变?不幸的是,我努力更新我的所有设备,所以没有8.2尝试这个。设置初始文本仍然适用于iOS 7.它仍然适用于iOS 8.3模拟器!不知道这只是Apple的一个错误。 - Bruce Geerdes
这就像是苹果公司的一个臭虫。只需删除Facebook应用程序,它就可以了。苹果虫?是。 - Jonny