Yar*_*dam 8 uikit instagram uiactivityviewcontroller swift
我在通过 iOS 共享表将图像共享到 Instagram 时遇到问题。我需要通过 URL 将图像共享到本地文件,因为我希望图像在共享时以某种方式命名,这是我发现我可以做到的唯一方法。代码是:
//This saves the image into the local temp directory and returns the file url
saveImageForSharing(image: image!) {(tempUrl) in
if tempUrl != nil {
let objectsToShare = [tempUrl!]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
self.present(activityVC, animated: true, completion: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
当 UIActivityViewController 出现时,您可以成功地将图像分享到所有可用的服务(包括 Facebook、电子邮件、Twitter 等),除了 Instagram。分享到Instagram时,弹出以下错误:

为 UIActivityViewController 的 completionWithItemsHandler 设置完成处理程序,'success' 参数返回为 false,但错误对象为 nil,因此没有关于出错的信息。
直接共享一个 UIImage 是没有问题的。保存到不同的 URL 或更改文件名时也是如此。
任何想法在这里可能发生的事情,或者我如何在设置项目名称的同时成功共享图像?
编辑:我在尝试通过其 url 共享视频时也遇到了这个问题。该视频仅存储在照片库中,我无法让 Instagram 接受它,即使从照片应用程序共享时它共享得非常好!此外,我在输出控制台中收到一条消息,显示“无法为 URL: ssue 沙箱令牌”。有什么建议吗?
谢谢!
尝试一下,看看是否可以解决您的问题。
class ShareItem: NSObject, UIActivityItemSource {
private let url: URL
private let title: String
init(url: URL, title: String) {
self.url = url
self.title = title
}
func activityViewControllerPlaceholderItem(_: UIActivityViewController) -> Any {
url
}
func activityViewController(_: UIActivityViewController, itemForActivityType _: UIActivity.ActivityType?) -> Any? {
url
}
func activityViewController(_: UIActivityViewController, subjectForActivityType _: UIActivity.ActivityType?) -> String {
title
}
func activityViewController(_: UIActivityViewController, dataTypeIdentifierForActivityType _: UIActivity.ActivityType?) -> String {
(try? url.resourceValues(forKeys: [.typeIdentifierKey]).typeIdentifier) ?? ""
}
func activityViewController(_: UIActivityViewController, thumbnailImageForActivityType _: UIActivity.ActivityType?, suggestedSize _: CGSize) -> UIImage? {
UIImage(contentsOfFile: url.absoluteString)
}
func activityViewControllerLinkMetadata(_: UIActivityViewController) -> LPLinkMetadata? {
let metadata = LPLinkMetadata()
metadata.originalURL = url
metadata.url = url
metadata.title = title
return metadata
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您将传递一个实例ShareItem来UIActivityViewController代替您的 tempUrl。
// This saves the image into the local temp directory and returns the file url
saveImageForSharing(image: image!) { tempUrl in
guard let url = tempUrl else {
return
}
let activityVC = UIActivityViewController(
activityItems: [
ShareItem(url: url, title: "Your Title")
],
applicationActivities: nil
)
self.present(
activityVC,
animated: true,
completion: nil
)
}
Run Code Online (Sandbox Code Playgroud)
希望这对您有帮助。
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |