EDIT: Still checking this frequently, will mark as solved when I or someone else helps me figure it out!
I am trying to upload a video to YouTube with YouTube’s REST
import GoogleSignIn
import GoogleAPIClientForREST
private let scopes = [kGTLRAuthScopeYouTube,
kGTLRAuthScopeYouTubeForceSsl,
kGTLRAuthScopeYouTubeUpload,
kGTLRAuthScopeYouTubeYoutubepartner]
private var service = GTLRYouTubeService()
private let youtubeObject = GTLRYouTube_Video()
func signInYoutube(){
GIDSignIn.sharedInstance()?.presentingViewController = self
GIDSignIn.sharedInstance()?.clientID = "Your_client_id"
GIDSignIn.sharedInstance().delegate = self
GIDSignIn.sharedInstance().scopes = scopes
if GIDSignIn.sharedInstance()?.hasPreviousSignIn() ?? false {
GIDSignIn.sharedInstance()?.restorePreviousSignIn()
} else {
GIDSignIn.sharedInstance()?.signIn()
}
}
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if let error = error {
self.service.authorizer = nil
} else {
self.service.authorizer = user.authentication.fetcherAuthorizer()
uploadVideoOnYoutube()
}
}
func uploadVideoOnYoutube() {
guard let videoUrl = Bundle.main.url(forResource: "sample_iTunes", withExtension: "mov")else {return}
//Status
let status = GTLRYouTube_VideoStatus()
status.privacyStatus = kGTLRYouTube_ChannelStatus_PrivacyStatus_Public
//Snippet
let snippet = GTLRYouTube_VideoSnippet()
snippet.title = "YOUR_VIDEO_TITLE"
//Upload parameters
let params = GTLRUploadParameters.init(fileURL: videoUrl, mimeType: "video/mov")
//YouTube Video object
youtubeObject.status = status
youtubeObject.snippet = snippet
let query = GTLRYouTubeQuery_VideosInsert.query(withObject: youtubeObject, part: "snippet,status", uploadParameters: params)
service.executeQuery(query, completionHandler: { (ticket, anyobject, error) in
if error == nil {
if let videoObject = anyobject as? GTLRYouTube_Video {
print(videoObject.identifier ?? "upload")
}
} else {
print(error?.localizedDescription)
}
})
}