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

Posted

技术标签:

【中文标题】如果安装了 Facebook 应用程序,UIActivityViewController 不显示 Facebook【英文标题】:UIActivityViewController Not Showing Facebook if Facebook App Installed 【发布时间】:2015-04-29 14:25:45 【问题描述】:

自从我更新到 ios 8.3 后,我的应用程序上的 UIActivityViewController 出现问题。 Twitter、Mail 和 Messages 显示正常,但 Facebook 不存在。我检查了我的代码以确保我没有不小心将其列在排除的活动中,并确保我在手机设置中登录 Facebook。我可以验证它是否适用于模拟器,但不适用于我的手机。有什么想法吗?

更新

不知何故,它与 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)

【问题讨论】:

正如我在帖子中已经提到的,我已登录。 你测试用的是什么版本的iphone? 【参考方案1】:

最新的 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 对相关问题的回答:https://***.com/a/30020929/2743762

编辑(2015 年 5 月 27 日)

当前的 Facebook 应用 (v 31.0) 解决了这个问题

【讨论】:

以上是关于如果安装了 Facebook 应用程序,UIActivityViewController 不显示 Facebook的主要内容,如果未能解决你的问题,请参考以下文章

如果安装了 Facebook 应用程序,PFFacebookUtils 登录方法不会执行任何操作

在android中使用facebook登录[重复]

当 Facebook 应用程序安装在设备/模拟器上时,发布到用户 facebook 墙不起作用

Xcode快速链接到Facebook页面[关闭]

Facebook 应用安装广告 - sdk 中的数据

Facebook无法在Flutter中使用安装Facebook应用程序登录