简体   繁体   English

覆盖UIActivityViewController切换到Facebook应用程序(用于Open Graph故事)

[英]Override UIActivityViewController to switch out to Facebook app (for Open Graph stories)

There's two kinds of Facebook story: standard 'link' content, or richer Open Graph stories. 有两种Facebook故事:标准的“链接”内容,或更丰富的Open Graph故事。

iOS provides UIActivityController , which lets you share 'link' content but doesn't let you perform Open Graph sharing. iOS提供了UIActivityController ,它允许您共享“链接”内容,但不允许您执行Open Graph共享。 For that I use FBSDKShareKit , which accomplishes this by switching out to the Facebook app if it's installed). 为此,我使用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. 我想要两全其美:提供一个UIActivityController ,每当选择Facebook时(见图),我希望它切换到Facebook应用程序。 Is this possible? 这可能吗?

Facebook按钮

It is possible :) Just create a new class - lets say FacebookActivityItem: 有可能:)只需创建一个新类 - 让我们说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

Now in your UIViewController, add an instance of this to the UIActivityViewController: 现在在你的UIViewController中,将这个实例添加到UIActivityViewController:

FacebookActivityItem *fbActivityItem = [FacebookActivityItem new];
fbActivityItem.delegate = self;

self.activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[fbActivityItem] applicationActivities:nil];

Now implement the method -facebookItemWasSelected in your UIViewController and tell it that it implements the FacebookActivityItemDelegate. 现在在UIViewController中实现方法-facebookItemWasSelected并告诉它它实现了FacebookActivityItemDelegate。 In this method just dismiss the activityViewController and implement your custom form with the FacebookSDK! 在这个方法中,只需关闭activityViewController并使用FacebookSDK实现自定义表单!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM