Недостаточная ошибка областей проверки подлинности для Google Sheet API для iOS - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь получить Google Sheet с помощью API Google Sheets для iOS.Я успешно добавил аутентификацию пользователя, поскольку он больше не запрашивает ключ API, но теперь я получаю ошибку 403 для:

Request had insufficient authentication scopes*.

Я добавил следующие области в Консоль разработчика Google.

/auth/drive
/auth/spreadsheets

А вот код, который я использую для создания и выполнения запроса.

let potentialShowSheetID = "1n4wvD2vSSiAnG_pnD9rWR6dNCSnZz0pAGAiSYRaJCKs"
let service = GTLRSheetsService()
private let scopes = [kGTLRAuthScopeSheetsSpreadsheets]  // This was specified in 
    // another Stack Overflow question, but I'm not sure how it would be used
    // and it doesn't seem to help.

override func viewDidLoad() {
    super.viewDidLoad()

    service.authorizer = GIDSignIn.sharedInstance().currentUser.authentication.fetcherAuthorizer()

    let query = GTLRSheetsQuery_SpreadsheetsGet.query(withSpreadsheetId: potentialShowSheetID)

    service.executeQuery(query) { (ticket, data, error) in
        print("GTLRService ticket: \(ticket)")
        if error != nil {
            print("GTLRService potential show query error: \(error!)")
        }
        else {
            print("data: \(data ?? "unknown data")")

        }
    }
}

Есть ли способ указать область запроса с помощью API Google Sheetsдля iOS?Я довольно хорошо просматривал фреймворк, и, похоже, он никогда не воспринимал это как параметр.Может быть, я упускаю что-то еще.

ОБНОВЛЕНИЕ : я проверил предоставленные области для пользователя, и он не включает API Drive или Sheets.

print("Scopes:", GIDSignIn.sharedInstance()?.currentUser.grantedScopes ?? "unknown scopes")

    // Prints -> Scopes: [https://www.googleapis.com/auth/userinfo.profile, https://www.googleapis.com/auth/userinfo.email]

Как я могу указать области, к которым будет предоставлен доступ во время аутентификации?

1 Ответ

0 голосов
/ 28 апреля 2019

После того, как я покопался в заголовках API входа в Google, я обнаружил, что мне просто нужно указать области действия с этим:

GIDSignIn.sharedInstance()?.scopes = [kGTLRAuthScopeSheetsSpreadsheets, kGTLRAuthScopeCalendar]

... перед входом с помощью GIDSignInButton.

...