Swift 实现分享视频到抖音
2022-08-20 本文已影响0人
HH思無邪
1508d5eb0439ece2ab299cc0ca207c15.jpeg
众所周知抖音是目前非常火爆的应用,app的推广运营自然也离不开抖音了,网上的大多文章以及抖音开放平台都是OC 实现的,我觉得还是有必要分享一下用Swift 是如何实现的
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
}
}
如果觉得文章对你有用,那就点个赞支持一下吧!如果有任何疑问或写得不好的地方欢迎在评论区留言 🙏