質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

995閲覧

swiftでGoogleDriveからファイルをDLしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/06/19 02:53

以下のコードで、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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

imageObjをData型にキャストしたら解決しました。

投稿2018/06/19 23:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問