Ios Facebook不显示在UIActivityViewController中,但twitter显示

Ios Facebook不显示在UIActivityViewController中,但twitter显示,ios,objective-c,facebook,ios8,uiactivityviewcontroller,Ios,Objective C,Facebook,Ios8,Uiactivityviewcontroller,我的iOS是8.1.2,我正在使用UIActivityViewController进行社交共享。 我单击按钮并允许UIActivityViewController显示 - (IBAction)UIActivityTypeButtonClick:(id)sender { NSString* text=@"I am sharing this text"; NSArray* sharedArray=@[text]; UIActivityViewController * activityVC=[[UI

我的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];
}
我明白了

我收到消息推特邮件WhatsApp和一个更多按钮。
单击“更多”我得到了这个

FACEBOOK在哪里。我的iPhone中有facebook应用程序,它也是用我的ID在“设置”中设置的。但facebook从未出现在这里。推特确实如此。这是虫子还是什么?请建议


感谢

要显示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];

我第一次看到这一点是在4月24日Facebook更新他们的应用程序时。只要安装了Facebook应用程序,到Facebook的纯文本共享就不起作用。删除后,它将再次可用

如果您尝试与纯文本一起共享URL或图像,您将看到Facebook作为一个选项,但文本字段将为空。图像或URL将毫无问题地附加

我在github上发布了一个重现此问题的示例项目:

这不是一个答案,但很明显,这个问题是由Facebook应用程序引起的

编辑:

这并不理想,但我创造了一个解决办法。不要忘记,您需要附加一个图像或URL才能工作

  • 检测用户是否已安装Facebook应用程序。如果他们这样做了,那么给他们一些类型的信息

    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
    }
    
  • 创建UIActivityItemProvider的子类并重写

    - (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;
    }
    
  • 告诉用户他们必须粘贴到Facebook文本字段才能共享

  • 归咎于Facebook


  • 我确认djr报告的内容-如果你有FB应用程序文本不再共享。我删除了FB应用程序,现在共享文本和图像作品

    Facebook希望您使用他们的SDK。他们阻止了设置初始文本的功能。(不知道怎么做。)查看我在类似帖子中的答案:


    理想的解决方案(来自Facebook)是使用他们的SDK。

    这会在UIActivityViewController中包括FB还是排除FB?我没有排外活动。在sharedArray中检查问题中的我的代码再传递一个参数以共享,如NSURL或UIImage,并尝试它应该可以工作。但当我们删除fb应用程序时,我们如何在fb上共享?有点困惑?你能详细说明一下吗!!谢谢。大声想一想:问题可能是当你有应用程序时,Facebook发送给你的
    activityType
    com.Facebook.extensions.post
    。它以前是
    UIActivityTypePostToFacebook
    (如果没有安装FB,情况仍然如此)。Gmail等也一样,但当我们删除fb应用程序时,我们如何在fb上共享?有点困惑?你能详细说明一下吗!!谢谢,我试过样品了。当删除Fb时,我在activityviewcontroller中获得了Fb应用程序。但这意味着什么?贴在哪里?请帮忙!!Thanks@Rajan您可以在iOS设置应用程序中登录Facebook。如果你在那里登录并且没有Facebook应用程序,Facebook应用程序无法阻止你将纯文本附加到帖子。在iOS 7中,这似乎不是问题。
    - (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;
    }