iOS 三方分享登录推送

Swift 实现分享视频到抖音

2022-08-20  本文已影响0人  HH思無邪
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
    }
}

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

上一篇下一篇

猜你喜欢

热点阅读