ios - Facebook 未显示在 UIActivityViewController 中,但 twitter 显示

标签 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=[[UIActivityViewController alloc]initWithActivityItems:sharedArray applicationActivities:nil];
activityVC.excludedActivityTypes=@[];
[self presentViewController:activityVC animated:YES completion:nil];
}

我明白了

enter image description here

我收到了MessageTwitterMailWhatsApp更多> 按钮。
点击更多我明白了。

enter image description here FACEBOOK 在哪里。我的 iPhone 中有 facebook 应用程序,它也在设置中使用我的 ID 进行了设置。但是facebook从来没有出现在这里。推特确实如此。这是一个错误还是什么?请建议

谢谢

最佳答案

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

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

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

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

这不是答案,但很明显问题是由 Facebook 应用引起的。

编辑:

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

  1. 检测用户是否安装了 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
    }
    
  2. 创建 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;
    }
    
  3. 告诉用户他们必须粘贴到 Facebook 文本字段才能共享。

  4. 在 Facebook 上归咎于此。

关于ios - Facebook 未显示在 UIActivityViewController 中,但 twitter 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879354/

相关文章:

ios - 在 iOS 8 上将视频分享到 Facebook

ios - UIActivityIndi​​catorView 未显示在 web View 中

iphone - Objective-C 中的 "implicit declaration of function"错误

ios - 查看其他 ViewController 后,用户输入数据不会保留

objective-c - 从 objc 委托(delegate)给 swift 以解除模态视图

iphone - 如何使用可选方法创建协议(protocol)?

ios - Facebook 注册在 if 语句中使用了错误的 segue - Swift

Web API 服务/移动应用程序的 Facebook 身份验证

c# - Xamarin Forms IOS 打开 PDF

ios - 正确裁剪和缩放 UIImage