Instagram图标没有显示在UIActivityViewController中

时间:2015-09-28 10:03:23

标签: ios iphone uiactivityviewcontroller

我有一个使用UIActivityViewControllerNSExtensionActivationSupportsWebURLWithMaxCount分享链接的应用程序,如下所示:

NSURL *shareUrl = [NSURL URLWithString:[[sarray valueForKey:@"url"] description]];

NSString* someText = @"";

NSArray* dataToShare = @[shareUrl,someText];  // ...or whatever pieces of data you want to share.
NSArray *appActivities = [NSArray arrayWithObjects:[[UIActivity alloc] init], nil];
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:dataToShare applicationActivities:appActivities];
activityViewController.excludedActivityTypes=@[UIActivityTypeAddToReadingList,UIActivityTypeAirDrop,UIActivityTypePrint,UIActivityTypeAssignToContact];

[self.navigationController presentViewController:activityViewController animated:YES completion:nil];
[activityViewController setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
if (!completed) return;

}]; 

除了Instagram,所有选项都会出现在UIActivityViewController

任何人都可以帮我发现我错在哪里或者默认是这样吗?

2 个答案:

答案 0 :(得分:1)

默认情况下,iOS不支持Instagram。你可能需要使用第三方库。

对于iOS 6及更高版本,您可以使用此UIActivity将图像上传到Instagram,它使用iOS挂钩具有相同的工作流程,但简化了开发。

试试这个库

DMActivityInstagram

答案 1 :(得分:0)

Swift 4.0 +

要使instagram应用显示在图标列表中,必须在UIImage数组中共享一个dataToShare对象。

我遇到一个问题,我的共享项包含一个URL和一个UIImage,并且在共享给iMessages时,我只希望共享URL而不是{{1 }}。

为解决此问题,我使呈现的UIViewController符合UIImage协议,如下所示:

UIActivityItemSource

}

而不是传入包含要共享对象的活动项数组,而是像这样传入PresentingViewController:

extension PresentingViewController: UIActivityItemSource {
    public func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        UIImage() // This allows instagram app to show as a choice
    }

    public func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
        guard let items = self.items else { return nil } // items to present
    
        switch activityType! {

        case .message, .postToTwitter, .copyToPasteboard, .mail:
            return items.first(where: { $0 is URL })

        default: // this catches the case where IG is tapped
            return items.first(where: { $0 is UIImage }) as? UIImage
    }
}