【问题标题】:Share a video and text on Twitter, Instagram and other services using UIActivityViewController使用 UIActivityViewController 在 Twitter、Instagram 和其他服务上分享视频和文本
【发布时间】:2016-10-29 11:17:49
【问题描述】:

我正在尝试在 Instagram、Facebook、Twitter 和本地服务(如邮件、消息等)上分享视频和文本...。我不知道如何让 Instagram 和 Twitter 同时出现在分享操作表:

如果我将一组文本和一个 URL 作为活动项传递给控制器​​,则只会显示 Instagram,但不会显示 Twitter。

let url: NSURL = NSURL() // a url that directs to a video
let items: [AnyObject] = ["Check out this video", url]    
let shareable = UIActivityViewController(activityItems: items, applicationActivities: nil)

controller.presentViewController(shareable,
                               animated: true,
                               completion: nil)

如果我创建一个实现 UIActivityItemSource 协议的类并将其用作 activityItems,则只会显示 Twitter,但不会显示 Instagram:

class VideoActivityItemSource: NSObject, UIActivityItemSource {

    private let videoUrl: NSURL
    private let shareText = "View the full video here!"

    init(url: NSURL) {
        self.videoUrl = url
    }

    func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        return ""
    }

    func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? {
        switch activityType {

        case UIActivityTypePostToFacebook:
            return self.videoUrl
        case UIActivityTypeMail:
            return self.videoUrl
        default:
            return ["text": self.shareText, "url": self.videoUrl]
        }
    }

    func activityViewController(activityViewController: UIActivityViewController, subjectForActivityType activityType: String?) -> String {
        return "Hey check this new cool app!!!"
    }

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

然后用这个替换项目:

items = [VideoActivityItemSource(url: url)]

我不知道为什么在这种情况下 Twitter 不会出现在操作表中。有人知道如何解决这个问题吗?

【问题讨论】:

    标签: swift video twitter instagram uiactivityviewcontroller


    【解决方案1】:

    我找到了答案。正确的做法是使用 UIActivityItemSource 协议的实现。 Instagram 没有出现在我使用 VideoActivityItemSource 类的第二个解决方案中的原因是我在 activityViewControllerPlaceholderItem 函数中返回了一个空字符串。 尽管 Apple 的文档说此函数中返回的对象类型不必与 itemForActivityType 函数使用的类型相匹配,但它实际上需要可由共享服务处理。对于 Instagram,它必须是视频或图像,否则 Instagram 不会在操作表中显示为共享选项。

    所以解决方案是在activityViewControllerPlaceholderItem函数中返回一个UIImage而不是一个空的String,那么Twitter和Instagram都会显示为分享选项。

    func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject {
        // this needs to return some random image to make sure Twitter and Instagram show up in the sharing actionsheet
        return UIImage(named: "someImage")!
    }
    

    【讨论】:

    • 你在 Instagram 上分享过吗?我无法分享。我没有显示 Instagram 图标
    • 如果手机上安装了 Instagram,它会在我测试时显示一个图标。
    【解决方案2】:

    确保您的手机上有 Instagram 应用。

    `let activityVC = UIActivityViewController(activityItems: yourobjectArray, applicationActivities: nil)
    
     activityVC.setValue("clipSnapshot", forKey: "subject")
     if let activityPopOver = activityVC.popoverPresentationController  {
                activityPopOver.sourceView = self.view
                activityPopOver.permittedArrowDirections = self.subviewView.isHidden ? .up : .left
            }
      self.present(activityVC, animated: true, completion: nil)
        }`
    

    当您看到共享窗口但仍看不到 Instagram 时,请转到列表末尾。 点击“更多”并检查是否包含instagram和twitter

    【讨论】:

      猜你喜欢
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-08
      • 2015-03-18
      相关资源
      最近更新 更多