如果安装了 Facebook 应用程序,UIActivityViewController 不显示 Facebook

UIActivityViewController Not Showing Facebook if Facebook App Installed

自从我更新到 iOS 8.3 后,我的应用程序上的 UIActivityViewController 出现问题。 Twitter、邮件和消息显示正常,但 Facebook 不存在。我已经检查了我的代码,以确保我没有意外地将它列在排除的 activity 中,并确保我在我的 phone 设置中登录了 Facebook。我可以验证它在模拟器上是否有效,但在我的 phone 中无效。有什么想法吗?

更新

不知何故,这与Facebook应用程序本身有关。如果我从我的 iPhone 中删除 Facebook,通过 Facebook 分享的选项就会回来。如果我重新安装 Facebook 应用程序,我将无法再分享到 Facebook。知道为什么要这样做吗?

-(IBAction) invite {
    NSCalendar* gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar] autorelease];
    NSDateComponents* theDateComponents = [gregorian components: NSWeekdayCalendarUnit fromDate: [NSDate date]];
    NSInteger weekDay = theDateComponents.weekday;
    if ( weekDay == 1 || weekDay >= 5 ) {
        NSString *invitation = @"Join me @ Fritch Church of Christ Sunday!  Bible Class @9:45AM Worship @10:45AM & 6:00PM!";

        NSArray *activityItems = @[invitation];

        UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];

        activityVC.excludedActivityTypes = @[ UIActivityTypePostToWeibo,
                                              UIActivityTypeCopyToPasteboard,
                                              UIActivityTypeAssignToContact,
                                              UIActivityTypePrint ];

        if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
        {
            UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:activityVC];
            [aPopover presentPopoverFromRect:[invite frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
        }
        else {

            [self presentViewController:activityVC animated:YES completion:nil];
        }
    }
    else {
        NSString *invitation = @"Join me @ Fritch Church of Christ this Wednesday! Devotional & Bible Class @7!";
        NSArray *activityItems = @[invitation];

        UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];

        activityVC.excludedActivityTypes = @[ UIActivityTypePostToWeibo,
                                              UIActivityTypeCopyToPasteboard,
                                              UIActivityTypeAssignToContact,
                                              UIActivityTypePrint ];

        if( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
        {
            UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:activityVC];
            [aPopover presentPopoverFromRect:[invite frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
        }
        else {

            [self presentViewController:activityVC animated:YES completion:nil];
        }


    }

}

来自模拟器

来自实际 iPhone(均已登录 Facebook)

最新的 Facebook iOS 应用更新似乎嵌入了一个应用扩展,该扩展优先于 Apple 原生 Facebook 扩展。

事实上,我可以看到它,因为在这两种情况下(Facebook 应用程序安装程序与否)UIActivityViewController 完成块给出的 NSString *activityTypecom.apple.UIKit.activity.PostToFacebook,它与 const 字符串 UIActivityTypePostToFacebook.

我认为它解释了你(和我)遇到的行为。

供您参考,在这两种情况下,我都设法在 UIActivityViewController 中显示了 Facebook,解决方法如下:提供至少一个 NSURL * 项供分享。

但是好像在安装Facebook app的时候,没有考虑其他的项目比如NSString *:(

这很可能是 Facebook 应用程序的问题,我希望它会在未来的应用程序版本中得到修复,这样无论是否安装了 Facebook 应用程序,我们都可以有相同的行为。

编辑(2015 年 5 月 22 日)

根据 Facebook 条款,恐怕这不是问题:请参阅 DeepFriedTwinkie 对相关问题的回答:

编辑(2015 年 5 月 27 日)

当前的 Facebook 应用程序 (v 31.0) 修复了该问题