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
相关产品推荐
相关产品推荐

