如果安装了 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 *activityType
是 com.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 登录方法不会执行任何操作