以下のコードで、GoogleDriveからファイルをDLしようとしています。実行すると、"@objc func finishedFileDownload"メソッドの変数errorに Error Domain=com.google.HTTPStatus Code=403 "(null)"
と出力されます。
何が間違っているのでしょうか?
swift
1 2import GoogleAPIClientForREST 3import GoogleSignIn 4import UIKit 5import MobileCoreServices 6 7class ViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate { 8 9 @IBOutlet weak var signInButton: GIDSignInButton! 10 @IBOutlet weak var output: UITextView! 11 @IBOutlet weak var imageView: UIImageView! 12 @IBOutlet weak var textField: UITextField! 13 14 // If modifying these scopes, delete your previously saved credentials by 15 // resetting the iOS simulator or uninstall the app. 16 // scope: サインイン時の権限 17 private let scopes = [kGTLRAuthScopeDriveFile,kGTLRAuthScopeDrive, kGTLRAuthScopeDriveAppdata, kGTLRAuthScopeDriveMetadata, kGTLRAuthScopeDriveScripts] 18 19 private let service = GTLRDriveService() 20 21 override func viewDidLoad() { 22 super.viewDidLoad() 23 // Configure Google Sign-in. 24 GIDSignIn.sharedInstance().delegate = self 25 GIDSignIn.sharedInstance().uiDelegate = self 26 GIDSignIn.sharedInstance().scopes = scopes 27 GIDSignIn.sharedInstance().signInSilently() 28 29 // Add the sign-in button. 30 view.addSubview(signInButton) 31 32 // Add a UITextView to display output. 33 output.frame = view.bounds 34 output.isEditable = false 35 output.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 20, right: 0) 36 output.autoresizingMask = [.flexibleHeight, .flexibleWidth] 37 output.isHidden = true 38 view.addSubview(output); 39 } 40 41 // サインインした際に呼ばれる 42 func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, 43 withError error: Error!) { 44 if let error = error { 45 showAlert(title: "Authentication Error", message: error.localizedDescription) 46 self.service.authorizer = nil 47 } else { 48 self.signInButton.isHidden = true 49 self.output.isHidden = false 50 self.service.authorizer = user.authentication.fetcherAuthorizer() 51 } 52 } 53 54 @objc func finishedFileDownload(fetcher: GTMSessionFetcher, finishedWithData data: NSData, error: NSError?) { 55 56 if error != nil { 57 //show an alert with the error message or something similar 58 print(error) 59 return 60 } 61 62 print(data) 63 64 //do something with data (save it...) 65 } 66 67 68 func downloadFile(id: String) { 69 70 let query = GTLRDriveQuery_FilesGet.query(withFileId: id) 71 72 service.executeQuery(query, completionHandler: { (ticket, object, error) in 73 print("ticket: (ticket)\n") 74 if error != nil { 75 print(error) 76 } 77 78 let imageObj = object as! GTLRDrive_File 79 80 let url = "https://www.googleapis.com/drive/v3/files/(imageObj.identifier!)?alt=media" 81 82 // URLを送る 83 let fetcher = GTMSessionFetcher(urlString:url) 84 85 fetcher.beginFetch(withDelegate: self, didFinish: #selector(self.finishedFileDownload(fetcher:finishedWithData:error:))) 86 }) 87 } 88} 89 90
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。