You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS Swift自定义应用上传视频至YouTube的实现方法咨询

当然有可行的实现方式!我之前在项目里做过类似的功能,下面给你拆解具体的实现思路和关键代码,帮你快速搞定视频上传到YouTube的需求:

核心依赖:YouTube Data API v3

这是YouTube官方提供的唯一合法上传途径,稳定性和兼容性都有保障。你需要先在Google Cloud控制台完成基础配置:创建项目、启用YouTube Data API v3、生成OAuth 2.0客户端ID(因为上传需要用户授权自己的YouTube账号)。

第一步:集成依赖库

在你的Swift项目里,推荐用CocoaPods添加两个必要的库:

pod 'GoogleAPIClientForREST/YouTube', '~> 1.3.1' # 处理YouTube API调用
pod 'GoogleSignIn' # 处理用户OAuth授权
第二步:实现用户授权逻辑

上传视频必须获得用户的YouTube账号权限,这里用Google Sign-In来完成授权:

import GoogleSignIn
import GoogleAPIClientForREST

class YouTubeUploadManager {
    private let youtubeService = GTLRYouTubeService()
    private let clientID = "你的OAuth客户端ID" // 替换成你在控制台生成的ID
    
    func initiateSignIn() {
        guard let gidClientID = GIDClientID(clientID: clientID) else {
            print("客户端ID格式错误")
            return
        }
        let config = GIDConfiguration(clientID: gidClientID)
        
        // 获取当前根控制器用于展示登录弹窗
        guard let rootVC = UIApplication.shared.keyWindow?.rootViewController else { return }
        
        GIDSignIn.sharedInstance.signIn(with: config, presenting: rootVC) { user, error in
            if let error = error {
                print("登录失败:\(error.localizedDescription)")
                return
            }
            guard let auth = user?.authentication else { return }
            self.youtubeService.authorizer = auth.fetcherAuthorizer()
            print("授权成功!可以开始上传视频了")
        }
    }
}
第三步:实现视频上传逻辑

授权完成后,就可以构建上传请求,包含视频元数据和文件本身:

extension YouTubeUploadManager {
    func uploadVideo(videoFileURL: URL, title: String, description: String) {
        // 1. 构建视频元数据
        let video = GTLRYouTube_Video()
        let snippet = GTLRYouTube_VideoSnippet()
        snippet.title = title
        snippet.descriptionProperty = description
        snippet.tags = ["iOS", "Swift", "Demo"] // 可选标签,按需修改
        video.snippet = snippet
        
        // 2. 设置视频隐私状态:可选值为"public"、"unlisted"、"private"
        let status = GTLRYouTube_VideoStatus()
        status.privacyStatus = "unlisted" // 测试阶段建议用unlisted,避免公开后需要审核
        video.status = status
        
        // 3. 配置上传参数(大视频建议分块上传)
        let uploadParams = GTLRUploadParameters(fileURL: videoFileURL, mimeType: "video/mp4")
        uploadParams.shouldUploadWithSingleRequest = false // 开启分块上传
        
        // 4. 创建并执行上传请求
        let query = GTLRYouTubeQuery_VideosInsert.query(withObject: video, part: "snippet,status", uploadParameters: uploadParams)
        
        youtubeService.executeQuery(query) { ticket, response, error in
            if let error = error {
                print("上传失败:\(error.localizedDescription)")
                return
            }
            guard let uploadedVideo = response as? GTLRYouTube_Video else { return }
            print("上传成功!视频ID:\(uploadedVideo.identifier ?? "")")
            // 这里可以跳转至视频页面或者做后续逻辑处理
        }
    }
}
关键注意事项
  • Info.plist配置:必须添加Google Sign-In的URL Scheme,格式为com.googleusercontent.apps.你的客户端ID,否则登录会失败。
  • 账号要求:测试用的Google账号必须拥有YouTube频道(没有的话可以去YouTube官网创建),否则无法上传视频。
  • 配额限制:YouTube Data API有每日配额限制,上传1个视频大概消耗1600单位配额,每日总配额为10000,开发测试时注意不要频繁调用。
  • 网络处理:建议添加网络状态监听,避免在无网络时发起上传请求;大视频上传时可以添加进度条提示,提升用户体验。

内容的提问来源于stack exchange,提问作者Uttam Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:28:57