美文网首页iOS 三方分享登录推送
Swift 实现分享视频到抖音

Swift 实现分享视频到抖音

作者: HH思無邪 | 来源:发表于2022-08-20 23:41 被阅读0次
    1508d5eb0439ece2ab299cc0ca207c15.jpeg

    众所周知抖音是目前非常火爆的应用,app的推广运营自然也离不开抖音了,网上的大多文章以及抖音开放平台都是OC 实现的,我觉得还是有必要分享一下用Swift 是如何实现的

    抖音开放平台iOS集成文档 >

    CocoaPods集成

    pod 'DouyinOpenSDK'
    

    分享

    第一步:引入头文件

    import DouyinOpenSDK
    

    第二步:构造分享的请求

    let req = DouyinOpenSDKShareRequest.init()
    

    第三步:设置分享参数

      req.mediaType = BDOpenPlatformShareMediaType.video
       //发布页面
       req.landedPageType = .publish
       //设置话题标签
       req.hashtag = "\(shareModel.share_title)#诗词#分享#H_思🈚️邪"
       req.state = "1khahfkakjfkhahjkhjgjasj555af"
     //设置分享的资源标示
      req.localIdentifiers = [shareLocalID]
    

    第四步:发送请求

            req.send { respond in
                    YLLog("抖音\(respond)")
                    if respond.isSucceed {
                    }else{    
                    }
                }
    
    

    抖音开放平台iOS分享文档 >
    官方文档对这些参数都做了详细解释,这里就不搬运了,有需要的请移步官网查看。

    官方文档对这个资源标识(localIdentifier)没有说明,由于我是第一次接触,所以在这里记录一下

    localIdentifier 资源标识

    这个通俗点来说,就是相册中的每个资源的唯一标识,可以通过这个标识来从相册中拿到这个资源。

    我们项目的应用场景是这样的,缓存一个要分享短视频,保存到相册,把localid 存起来,然后分享的时候直接用,判断localid是否有资源,如果没有,就在缓存中去取,保存到相册拿到localid然后分享。

    下载

     let request = URLRequest.init(url: videoURL)
      let seesion = URLSession.shared
     let downloadTask = seesion.downloadTask(with: request) { location, response, error in
                
                //缓存视频
                let cache = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).map(\.path).last
                let filePath = URL(fileURLWithPath: cache ?? "").appendingPathComponent(fileName, isDirectory: true).path
    //            print("filePath = \(filePath)")
                let toURL = URL(fileURLWithPath: filePath)
                try? FileManager.default.moveItem(at: location!, to: toURL)
               
                //存到相册
                vm_saveToPhotos(url: toURL) { locaid in
                    self.shareLocalID = locaid
                    //将id存本地
                    let model = VideoLocalModel.init()
                    model.localID = locaid
                    model.videoName = videoName
                    
                    DBmanager.share.inser(objects: [model], intoTable: .videoLocalTable)
                }
                
            }
            downloadTask.resume()
    

    将视频缓存到cache 目录下

    这个方法下载视频,默认是在temp目录下,会被系统清理掉,所以得移到cache目录下

    //缓存视频
    let cache = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).map(\.path).last
    let filePath = URL(fileURLWithPath: cache ?? "").appendingPathComponent(fileName, isDirectory: true).path
    //            print("filePath = \(filePath)")
    let toURL = URL(fileURLWithPath: filePath)
    try? FileManager.default.moveItem(at: location!, to: toURL)
    

    保存到相册拿到localid

    ///保存视频到相册
    ///返回标识符:locaid
    func vm_saveToPhotos(url:URL, successSave:@escaping ((_ locaid:String)->Void)){
        
        var localId = ""
        
        PHPhotoLibrary.shared().performChanges {
            let result = PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: url)
            let assetPlaceholder = result?.placeholderForCreatedAsset
            localId = assetPlaceholder?.localIdentifier ?? ""
            
        } completionHandler: { isSuccess, error in
          
            if isSuccess {
                successSave(localId)
               YLLog("保存本地成功!id:\(localId)")
                
            }
           
        }
    }
    

    根据localid 判断相册是否存在资源

    ///根据localid 判断相册是否存在资源
    func vm_isLocaSourceWithlocalid(localid: String) ->Bool{
        
        let result = PHAsset.fetchAssets(withLocalIdentifiers: [localid], options: nil)
        if result.count > 0 {
           return true
        }else{
           return false
        }
    }
    

    如果觉得文章对你有用,那就点个赞支持一下吧!如果有任何疑问或写得不好的地方欢迎在评论区留言 🙏

    相关文章

      网友评论

        本文标题:Swift 实现分享视频到抖音

        本文链接:https://www.haomeiwen.com/subject/lwjbgrtx.html