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

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

新規登録して質問してみよう
ただいま回答率
85.46%
GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Google API

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

0回答

526閲覧

Google SpreadSheetAPIへのURLSessionを使用した接続

i_zac8132

総合スコア16

GET

GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

Google API

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2020/12/12 02:32

Google SpreadSheetAPI使って、簡単な読み書きのできるiOS向けアプリをXcode上でSwiftで書いています。
自分では解決できないエラーに遭遇してしまったため質問させてください。


  • 解決したいこと

"Request had insufficient authentication scopes."のエラーを解消したい

  • 実現したいこと

自分のGoogle IDにログインして、SpreadSheet上の値を読み込む

  • 現状のコードでできていること

URLSession/dataTaskを使ってGETリクエストを投げた.
(ログインまでは完了していて、取得したアクセストークンでOAuth2.0認証は通っているはず)

  • 結果

Error:403が出て読み込めない


「"Scope"に、何かの情報を追加する」と行った類の記載が必要な気がするのですが、
このコードのどこにその記載を追加して良いか分からずという状況です。
皆様のお力添えよろしくお願いいたします。

###コード

Swift

1static func fetchDataFromSheet(accessToken: String, completion: @escaping (ReadSheet) -> Void){ 2 let baseUrl = "https://sheets.googleapis.com/v4/spreadsheets" 3 let spreadsheetId = [自分のSpreadSheetID] 4 let range = "test!A1:B3" 5 let urlString = baseUrl + "/" + spreadsheetId + "/values/" + range 6 7 let headers = [ 8 "Authorization": "Bearer "+accessToken, 9 "cache-control": "no-cache" 10 ] 11 12 guard let urlComponents = NSURL(string: urlString) else { 13 return 14 } 15 16 let request = NSMutableURLRequest(url: urlComponents as URL) 17 request.httpMethod = "GET" 18 request.allHTTPHeaderFields = headers 19 20 let shared = URLSession.shared 21 let task = shared.dataTask(with: request as URLRequest) { data, response, error in 22 23 guard let jsonData = data else { 24 return 25 } 26 27 do { 28 let jsonstr:String = String(data: jsonData, encoding: .utf8)! 29 print(jsonstr) 30 let readSheet = try JSONDecoder().decode(ReadSheet.self, from: jsonData) 31 32 completion(readSheet) 33 } catch { 34 print(error.localizedDescription) 35 } 36 } 37 task.resume() 38 }

###サーバーからの応答

Swift

1{ 2 "error": { 3 "code": 403, 4 "message": "Request had insufficient authentication scopes.", 5 "status": "PERMISSION_DENIED" 6 } 7}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問