Facebook没有显示在UIActivityViewController中,但是Twitter可以。

16

我的iOS版本为8.1.2,我正在使用UIActivityViewController进行社交分享。 我点击一个按钮并允许UIActivityViewController呈现

- (IBAction)UIActivityTypeButtonClick:(id)sender {

NSString* text=@"I am sharing this text";
NSArray* sharedArray=@[text];
UIActivityViewController * activityVC=[[UIActivityViewController alloc]initWithActivityItems:sharedArray applicationActivities:nil];
activityVC.excludedActivityTypes=@[];
[self presentViewController:activityVC animated:YES completion:nil];
}

我遇到了这个问题

输入图像描述

我获得了MessageTwitterMailWhatsApp和一个More按钮。
点击More后,我看到了这个。

输入图像描述 Facebook在哪里? 我的iPhone上有Facebook应用程序,并且在设置中也设置了我的ID。但是Facebook从未出现在这里。Twitter可以。这是一个错误还是什么?请提供建议。

谢谢

5个回答

19
我第一次看到这个问题是在Facebook于4月24日更新其应用程序时。只要安装了Facebook应用程序,就无法使用纯文本分享到Facebook。删除应用程序后,又可以正常使用。
如果您尝试与纯文本一起分享URL或图像,则会看到Facebook作为选项,但文本字段将为空。图像或URL将附加而没有问题。
我在github上发布了一个可重现此问题的示例项目。

https://github.com/djr/UIActivityViewController-Facebook

这不是一个答案,但很明显问题是由Facebook应用程序引起的。
编辑:
这并不理想,但我创建了一个解决方法。不要忘记需要附加图像或URL才能使其工作。
  1. Detect if the user has the Facebook app installed. If they do, then give them some type of informational message.

    BOOL facebookIsInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]];
    BOOL isUserLoggedInWithFacebook = [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook];
    
    if(isUserLoggedInWithFacebook && facebookIsInstalled)
    {
        // Explain that they have to copy and paste in order to share on Facebook
    }
    
  2. Create a subclass of UIActivityItemProvider and override

    - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
    {
        NSString *stringToShare = @"string to share";
    
        if([activityType isEqualToString:UIActivityTypePostToFacebook] ||
           [activityType isEqualToString:@"com.facebook.Facebook.ShareExtension"] ||
           [activityType.lowercaseString rangeOfString:@"facebook"].length) 
           // Because who knows when they are going to change the activityType string?
        {
            // Automatically copy the text for them
            [[UIPasteboard generalPasteboard] setString:stringToShare];
        }
    
        return stringToShare;
    }
    
  3. Tell the user that they have to paste into the Facebook text field in order to share.

  4. Blame it on Facebook.


但是当我们删除了 Facebook 应用程序后,如何在 Facebook 上分享呢?有点困惑?您能否详细说明一下!谢谢。 - Rajan Maheshwari
我试了一下这个例子。当删除Fb时,我在activityviewcontroller中看到了Fb应用程序。但是这是什么意思呢?它将在哪里发布?请帮忙解答!谢谢。 - Rajan Maheshwari
@Rajan 你可以在iOS设置应用程序中登录Facebook。如果你已经在那里登录,而没有安装Facebook应用程序,Facebook应用程序就无法阻止你将纯文本附加到帖子上。在iOS 7中,这似乎不是一个问题。 - djr

3

我确认djr所报告的情况 - 如果你安装了Facebook应用程序,则不再共享文本。我删除了Facebook应用程序,现在可以分享文本和图片。


但是当我们删除了 Facebook 应用程序后,如何在 Facebook 上分享呢?有点困惑?您能否详细说明一下!谢谢。 - Rajan Maheshwari
思考中: 问题可能是当你拥有该应用时,Facebook发送给你的activityType现在变成了类似于com.facebook.extensions.post。以前它是UIActivityTypePostToFacebook(如果你没有安装FB仍然是这样)。Gmail等情况也是一样的。 - Webdevotion

3

2
NSString* text=@"I am sharing this text";
NSURL *myWebsite = [NSURL URLWithString:@"http://www.website.com/"];
//  UIImage * myImage =[UIImage imageNamed:@"myImage.png"];
NSArray* sharedArray=@[text,myWebsite];
 UIActivityViewController * activityVC=[[UIActivityViewController alloc]initWithActivityItems:sharedArray applicationActivities:nil];
NSArray *excludedActivities = @[];

activityVC.excludedActivityTypes=excludedActivities;
[self presentViewController:activityVC animated:YES completion:nil];

这个 UIActivityViewController 中是否包含 FB,还是排除掉了?我的 excludedActivities 里面没有任何内容。请检查我提出的代码。 - Rajan Maheshwari
在 sharedArray 中,传递一个额外的参数来共享像 NSURL 或 UIImage 这样的对象,然后尝试一下,应该可以工作。 - Arpit Lokwani

1
要显示Facebook分享按钮,您必须将图像添加到活动项目数组中...这可能是苹果方面的错误,但我没有看到任何关于此问题的公开雷达。
此外,请注意,在iOS 8.3上,由于某种原因,无法向Facebook添加文本。当添加文本时,您只会看到一个空白文本字段。
UIImage *image = [UIImage imageNamed:@"__some_image__file"];

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[image]
                                                                                     applicationActivities:nil];

[self presentViewController:activityViewController animated:YES completion:nil];

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