Я создал проект GCP и Google Apps Script (GAS). В настройках GASP я установил идентификатор созданного мной GCP (вместо дефолтного). В GCP я создал 2 клиента:
- Приложение для Android, использующее мой SHA-1 и имя пакета.
- Веб-клиент для управления токенами OAuth.
Теперь я хочу выполнить свою функцию в GASP, который в настоящее время просто создает электронную таблицу на Диске пользователя, выполняя запрос GET. Вот как выглядит настоящая функция:
Код: Выделить всё
function doGet(e) {
let r = {}
try {
SpreadsheetApp.create("TEST")
r.status = "ok"
} catch (e) {
r.status = e.message
}
return ContentService.createTextOutput(JSON.stringify(r)).setMimeType(ContentService.MimeType.JSON)
}
Если я открываю вкладку браузера, войдите в систему, используя свою авторизованную учетную запись Google, и перейдите к https://script.google.com/macros/s/AKfy ... 518PhbpH6r[...]N1A/exec, браузер отображает JSON со статусом "status":"ok", и на моем Диске создается электронная таблица. Поскольку сообщение об ошибке не появляется, я предполагаю, что у GASP есть необходимые разрешения (уже предоставленные с помощью моего приложения для Android). Затем я хотел выполнить этот запрос GET из своего приложения для Android или, по сути, из любого другого места, поддерживающего HTTP-запрос. После того, как я установил OkHttpClient с Authenticator и Interceptor, которые отвечают за аутентификацию, я не смог выполнить эту функцию из своего приложения, я всегда получаю ошибку 401. Я смоделировал свой запрос в приложении Android в другом GASP (просто среда, которая позволяет мне выполнять запросы GET):
Код: Выделить всё
function request() {
let r = UrlFetchApp.fetch(
"https://script.google.com/macros/s/AKfycbx-sD70nS3Ee518PhbpH6ru_xWgCGr9Cj5pJBCjr[...]N1A/exec",
{
method: "get",
muteHttpExceptions: true,
headers: {
'Authorization': `Bearer ${ACCESS_TOKEN}`
}
}
)
Logger.log(r.getResponseCode())
Logger.log(r.getContentText())
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... using-an-h
Мобильная версия