使用背景图片和贴纸向Instagram分享故事-IOS Swift

时间:2019-02-05 08:13:26

标签: ios swift instagram share url-scheme

我正在尝试通过ios应用上的URL方案与背景图像和贴纸图像共享故事,我正在使用附加的代码,但它不起作用。 当我尝试仅分享背景图片或贴纸时,它确实起作用。但是当我尝试同时在其顶部共享背景图像和标签时,它就不起作用了。

有什么想法吗?

func shareToInstagram(deepLinkString : String){
        let url = URL(string: "instagram-stories://share")!
        if UIApplication.shared.canOpenURL(url){

            let backgroundData = UIImageJPEGRepresentation(UIImage(named: "shop_placeholder")!, 1.0)!
            let creditCardImage = UIImage(named: "share_instagram")!
            let stickerData = UIImagePNGRepresentation(creditCardImage)!
            let pasteBoardItems = [
                                    ["com.instagram.sharedSticker.backgroundImage" : backgroundData],
                                    ["com.instagram.sharedSticker.stickerImage" : stickerData],
                                  ]

            if #available(iOS 10.0, *) {

                UIPasteboard.general.setItems(pasteBoardItems, options: [.expirationDate: Date().addingTimeInterval(60 * 5)])
            } else {
                UIPasteboard.general.items = pasteBoardItems
            }
            UIApplication.shared.openURL(url)
        }

2 个答案:

答案 0 :(得分:1)

一切都正确,我的代码相似,并且适用于iOS 11+。我建议您执行以下操作:

  1. 检查传递给粘贴板的图像数据(无法用转换jpg UIImagePNGRepresentation,反之亦然
  2. 检查info.plist。您应该在其中启用“ instagram故事”方案(LSApplicationQueriesSchemes键)

答案 1 :(得分:0)

我复制粘贴的OP代码以在自己的应用中使用(仅替换不同的UIImage),发现只有1个问题,粘贴板项目应包含在单个数组中,否则instagram仅呈现第一个项目(在这种情况下,背景层)。要解决此问题,请使用以下代码替换剪贴板项目的声明

let pasteBoardItems = [
                ["com.instagram.sharedSticker.backgroundImage" : backgroundData,
                "com.instagram.sharedSticker.stickerImage" : stickerData]
            ]

(基本上只需移除将两个项目分开的关闭和打开括号)

还要像先前的回答所述,确保info.plist文件的LSApplicationQueriesSchemes中包含“ instagram故事”

我在我的应用中使用了此确切的代码,现在它可以完美运行