Ios 如何自定义UIActivityViewController,以便在发布到facebook和twitter时显示URL链接?

Ios 如何自定义UIActivityViewController,以便在发布到facebook和twitter时显示URL链接?,ios,facebook,ios6,Ios,Facebook,Ios6,因此,我正在iOS 6中试用新的UIActivityViewController,它很容易启动和运行,但我不知道如何控制它。因此,我想发布一个链接到一篇文章,我还想附加一个链接的图像。我不想把这张图片上传到facebook的相册上,就像一个URL缩略图一样 这在facebook SDK中很容易实现,因为他们提供了对它的完全控制,但是有没有办法通过UIActivityViewController来实现呢?以下是我得到的: NSArray *activityItems = @[[NSURL

因此,我正在iOS 6中试用新的
UIActivityViewController
,它很容易启动和运行,但我不知道如何控制它。因此,我想发布一个链接到一篇文章,我还想附加一个链接的图像。我不想把这张图片上传到facebook的相册上,就像一个URL缩略图一样

这在facebook SDK中很容易实现,因为他们提供了对它的完全控制,但是有没有办法通过
UIActivityViewController
来实现呢?以下是我得到的:

    NSArray *activityItems = @[[NSURL URLWithString:[article link]], [UIImage imageNamed:@"myStockImage"]];
    UIActivityViewController *viewCont = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    [self presentViewController:viewCont animated:YES completion:nil];
这是可行的,但它会将图像上传到“iOS相册”中。如果我没有在数组中添加图像,那么facebook页面看起来是空白的,附件显示了一个灰色的safari徽标(好像缩略图不见了!)在safari中,当你尝试在facebook上添加链接时,它使用页面的屏幕抓取作为缩略图,我想这样做

更新:

下面是我的应用程序的外观(使用UIActivityViewController或SLCompose方式)。查看如何将图片上载到相册
iOS照片

以下是我希望它看起来的样子(另请参见Safari):


如果您不特别需要使用UIActivityViewController,那么使用SLComposeViewController很容易实现这一目的

+(void)presentShareWidgetWithText:(NSString*)text url:(NSURL*)url images:(NSArray*)images toService:(NSString*)service presentIn:(UIViewController*)parentViewController {
    SLComposeViewController* controller = [SLComposeViewController composeViewControllerForServiceType:service];
    if (controller == nil) {
        DLog(@"Could not initialize SLComposeViewController for %@!", service);
        return;
    }
    if (url != nil) {
        if (![controller addURL:url])
            DLog(@"Failed adding url %@!", url);
    }
    if (images != nil) {
        for (UIImage* image in images) {
            if (![controller addImage:image]) {
                DLog(@"Failed adding image: %@", image);
            }
        }
    }
    if (![controller setInitialText:text]) {
        DLog(@"Failed setting initial text: %@", text);
    }

    SLComposeViewControllerCompletionHandler handler = ^(SLComposeViewControllerResult result) {
        switch (result) {
            case SLComposeViewControllerResultCancelled:
                DLog(@"SLComposeViewControllerResultCancelled");
                break;

            case SLComposeViewControllerResultDone:
                DLog(@"SLComposeViewControllerResultDone, Shared on service: %@", service);
                break;

            default:
                DLog(@"Unhandled result: %d", result);
                break;
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            [parentViewController dismissViewControllerAnimated:YES completion:^{
                DLog(@"Dismissed a controller here!");
            }];
        });
    };

    [controller setCompletionHandler:handler];

    [parentViewController presentViewController:controller animated:YES completion:^{
        DLog(@"Presented %@!", controller);
    }];
}

我对此进行了搜索,得出的结论是,使用
UIActivityViewController
根本无法实现您的目标。每次您尝试共享照片时,它只会使您将照片放入其中一个相册中,默认情况下为“iOS”相册

在我的例子中,只要从我需要共享的链接中检索到图像,我就不需要发布照片(就像当你在Facebook时间线上发布链接时,它会自动从该链接中抓取一张图片,然后该图片成为链接)。为了做到这一点,我发现如果我只发布了一个URL,它就不起作用了。您必须先发布一些初始文本,然后发布URL,然后将对象按该顺序放入
activityItems
数组中

这是我的工作代码:

NSArray * activityItems = @[[NSString stringWithFormat:@"Some initial text."], [NSURL URLWithString:@"http://www.google.com"]];
NSArray * applicationActivities = nil;
NSArray * excludeActivities = @[UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeMessage];

UIActivityViewController * activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities];
activityController.excludedActivityTypes = excludeActivities;

[self presentViewController:activityController animated:YES completion:nil]; 
我还注意到,如果你沿着这些对象发布一张照片,它将无法从链接中检索任何图像


我希望这有帮助

更新了Swift 3.0的答案

let url = URL(string: "google.com")
let shareText = "Your string goes here"
let shareItems: [Any] = [shareText, url!]

let activityVC = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
activityVC.excludedActivityTypes = [.airDrop, .postToFlickr, .assignToContact, .openInIBooks]

self.present(activityVC, animated: true, completion: nil)

Facebook不会接受该字符串,但与其他许多社交媒体网站一样,它会显示一个URL的图像/链接框,该框也不起作用。它会在缩略图预览中添加图像,但如果您查看它,它实际上会将图像放入名为“iOS照片”的相册中。我希望它只是缩略图预览(就像safari那样)。我不希望图片进入用户的相册嗯,好吧,我只是用了链接,没有图片。仅使用链接时,它从链接本身选择图像。它在链接目标是iOS应用程序URL的地方工作,这是迄今为止我唯一使用的东西。花了几个小时!!!在这件该死的事情上,试图弄明白为什么它不能正确地获取我的url。谢谢你,伙计!当你与google.com互动时,它会起作用,但当你使用我们facebook页面的链接时,它只会显示一个丑陋的指南针。但是当我在facebook上分享这个链接时,这个链接是一个集成的“facebook页面”——非常好的链接。但是当在facebook自己的页面中使用时,手机上的缩略图就不起作用了,这让人非常恼火。grrrFYI:子类化
UIActivity
允许您调整displayed@baquiax它在ios 8.1上工作。它不起作用的一个可能原因是您的网页没有设置
og
参数。此
og
元数据标签允许facebook获取指定的image@MKYung谢谢直到今天我才找到解决方案,但我会再试一次。:)
let url = URL(string: "google.com")
let shareText = "Your string goes here"
let shareItems: [Any] = [shareText, url!]

let activityVC = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
activityVC.excludedActivityTypes = [.airDrop, .postToFlickr, .assignToContact, .openInIBooks]

self.present(activityVC, animated: true, completion: nil)