有两种 Facebook 故事:标准“链接”内容或更丰富的 Open Graph 故事。
iOS 提供了 UIActivityController
,它允许您共享“链接”内容,但不允许您执行 Open Graph 共享。为此,我使用了 FBSDKShareKit
,它通过切换到已安装的 Facebook 应用程序来实现这一点。
I want best of both worlds, though: present a UIActivityController
, and whenever Facebook is selected (see image), I want it to switch out to the Facebook app.这可能吗?
最佳答案
这是可能的 :) 只需创建一个新类 - 让我们说 FacebookActivityItem:
// .h
@protocol FacebookActivityItemDelegate <NSObject>
- (void)facebookItemWasSelected;
@end
@interface FacebookActivityItem : NSObject<UIActivityItemSource>
@property (nonatomic, weak) id <FacebookActivityItemDelegate> delegate;
@end
// .m
@implementation FacebookActivityItem
/// called to determine data type. only the class of the return type is consulted. it should match what -itemForActivityType: returns later
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
return UIActivityTypePostToFacebook;
}
/// called to fetch data after an activity is selected. you can return nil.
- (nullable id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
if (self.delegate != nil) {
[self.delegate facebookItemWasSelected];
}
}
return nil;
}
@end
现在在您的 UIViewController 中,将其实例添加到 UIActivityViewController:
FacebookActivityItem *fbActivityItem = [FacebookActivityItem new];
fbActivityItem.delegate = self;
self.activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[fbActivityItem] applicationActivities:nil];
现在在您的 UIViewController 中实现方法 -facebookItemWasSelected 并告诉它它实现了 FacebookActivityItemDelegate。在这个方法中,只需关闭 activityViewController 并使用 FacebookSDK 实现您的自定义表单!
关于ios - 覆盖 UIActivityViewController 以切换到 Facebook 应用程序(用于 Open Graph 故事),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805158/