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