Swift UIActivityViewController 图片和链接分享无法在 Facebook 上工作

14

我正在使用UIActivityViewController分享图片。在Facebook最近的更改之后,我可以单独分享图片和URL,但我无法同时分享图片和URL。相同的代码在Mail、Twitter等平台上正常运行,不确定我在Facebook方面错过了什么。

func shareImage() {
    var myWebsite = NSURL(string:"http://www.google.com/")
    var img: UIImage = currentPhoto!
    var shareItems:Array = [img, myWebsite]
    let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
    activityViewController.excludedActivityTypes = [UIActivityTypePrint, UIActivityTypePostToWeibo, UIActivityTypeCopyToPasteboard, UIActivityTypeAddToReadingList, UIActivityTypePostToVimeo]
    self.presentViewController(activityViewController, animated: true, completion: nil)

}
4个回答

15

我已经修改了您的代码以适用于Swift 2.0:

@IBAction func shareButtonPressed(sender: AnyObject) {

    let myWebsite = NSURL(string:"http://www.google.com/")
    let img: UIImage = image!

    guard let url = myWebsite else {
        print("nothing found")
        return
    }

    let shareItems:Array = [img, url]
    let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
    activityViewController.excludedActivityTypes = [UIActivityTypePrint, UIActivityTypePostToWeibo, UIActivityTypeCopyToPasteboard, UIActivityTypeAddToReadingList, UIActivityTypePostToVimeo]
    self.presentViewController(activityViewController, animated: true, completion: nil)

}

并且它正在发布一个带有URL的图片。

使用此代码的结果:

enter image description here


1
你的 Facebook 原生应用程序版本是什么? - Chandu kumar.Alasyam
我也有,并且它工作正常。尝试使用另一台设备发布。 - Dharmesh Kheni
抱歉伙计,我不知道为什么它不起作用。如果有人知道这个问题,请等待另一个答案。 - Dharmesh Kheni
抱歉,你不能这样做,因为预定义的文本将被忽略。 - Dharmesh Kheni
就像我说的一样,你不能添加文本.. :) - Dharmesh Kheni
显示剩余9条评论

6

SWIFT 3

    let myWebsite = NSURL(string: visitedlink)

    let img: UIImage = UIImage(named:"Logo")!

    guard let url = myWebsite else {
        print("nothing found")
        return
    }

    let shareItems:Array = [img,url]
    let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
    activityViewController.excludedActivityTypes = [UIActivityType.print, UIActivityType.postToWeibo, UIActivityType.copyToPasteboard, UIActivityType.addToReadingList, UIActivityType.postToVimeo]
    self.present(activityViewController, animated: true, completion: nil)

我试图在Facebook上发布图片,但无法发布。只能分享URL...我们无法使用UIActivityViewController在Facebook上分享图片/视频吗? - Anand Gautam
最近你不能使用他们自己的SDK :( @AnandGautam - Ahmed Safadi
正确的@Safad Funy,但是我们可以使用SLComposeViewController在Facebook上分享图片,但需要使用FB SDK来分享视频。 - Anand Gautam

2
这是我的解决方案。实现UIActivityItemSource协议。支持文本、URL和图像。
func doShare() {
    let viewController = UIActivityViewController(activityItems: ["ScreenSort for iOS.", URL.init(string: "https://itunes.apple.com/app/id1170886809")!], applicationActivities: nil)
    viewController.popoverPresentationController?.sourceView = self.view // so that iPads won't crash
    self.present(viewController, animated: true, completion: nil)
}

extension YourViewController: UIActivityItemSource {
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return ""
    }

    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
        return URL.init(string: "https://itunes.apple.com/app/id1170886809")!
    }

    func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivityType?) -> String {
        return "ScreenSort for iOS: https://itunes.apple.com/app/id1170886809"
    }

    func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivityType?, suggestedSize size: CGSize) -> UIImage? {
        return nil
    }
}

1
分享图像和文本
        let imgShare : UIImage = UIImage(named: "store")!
        let textToShare = "Image form My app."

        let objectsToShare = [textToShare, imgShare]
        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

        activityVC.popoverPresentationController?.sourceView = sender
        self.presentViewController(activityVC, animated: true, completion: nil)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接