«Требуется авторизация для выполнения этого действия» для предупреждения / всплывающего окна, надстройка скрипта Служб Google для электронных таблиц - PullRequest
2 голосов
/ 07 октября 2019

Я создаю надстройку Google Apps Script для таблиц Google.

В манифесте я явно запросил следующие области действия: "https://www.googleapis.com/auth/script.container.ui"," https://www.googleapis.com/auth/spreadsheets"

Кроме того, «Экран согласия OAuth» в моем проекте Google Cloud имеет те же области, и они уже проверены Google.

Тем не менее, я не могу дать отзыв своим пользователям в случае неправильного ввода,Я пробовал следующее:

  • SpreadsheetApp.getActiveSpreadsheet (). Show (htmlApp);
  • SpreadsheetApp.getActiveSpreadsheet (). Toast (message);
  • SpreadsheetApp.getUi (). alert ('Неправильный ввод.');
  • SpreadsheetApp.getUi (). showSidebar (html);
  • Browser.msgBox ('Неправильный ввод.');

Кажется, что ничего не работает, я всегда вижу ошибку «Требуется авторизация для выполнения этого действия» в журналах стекового драйвера.

Что бы сработало, это создать «лист ошибок» и журналвсе входные ошибки в нем, или сделать одну ячейку на основном листе «ошибочной ячейкой» и записать в нее все входные ошибки. Я думаю, что это не очень хорошее решение с точки зрения пользовательского опыта.

Кажется, что эта проблема как-то связана с authMode: https://developers.google.com/gsuite/add-ons/concepts/editor-auth-lifecycle#authorization_modes, поскольку «Доступ к пользовательскому интерфейсу» возможен только в пределах«FULL» authMode, что не так во время onEdit ().

Странно то, что другие дополнения могут показывать предупреждение / всплывающее окно. Это хак? Или мне нужно больше областей? Или я должен что-то изменить?

РЕДАКТИРОВАТЬ 08.10.2019:

@ Жак-Гузель Херон: Например: пользователь вводит дату в ячейку A1 идругой в ячейке B1. В триггере onEdit (e) я хочу проверить, находится ли дата в B1 после даты в A1, если нет, я хочу предупредить пользователя. Все вышеперечисленные методы приводят к ошибке «Для выполнения этого действия требуется авторизация» при публикации приложения. Когда приложение не опубликовано, .toast (), .alert () и .msgBox () работают в моей тестовой среде. Странно то, что эти методы затем создают DIV-элемент, тогда как другие надстройки создают IFRAME-элемент для своего оповещения / диалогового окна. Поэтому я думаю, что они используют другой метод, и он не имеет ничего общего с областями видимости. Кроме того, я посмотрел в процессе проверки OAuth этих надстроек и области видимости перечислены в dev-tools. Они не используют никаких специальных «ui-scope», поэтому я сомневаюсь, что причина этой ошибки связана с областью действия.

EDIT 09.10.2019: Теперь я знаю, как оповещение / диалоговое окно-коробка, содержащая IFRAME-элемент, может быть изготовлена. Для этого могут использоваться следующие методы:

var htmlString, msg, htmlOutput;

htmlString = '<p>my html string</p>';
msg = 'my message';

htmlOutput = HtmlService
    .createHtmlOutput(htmlString)
    .setSandboxMode(HtmlService.SandboxMode.IFRAME)
    .setHeight(140);

SpreadsheetApp
    .getUi()
    .showModalDialog(htmlOutput, msg);

Но этот метод также нельзя вызвать во время onEdit (e).

Можно вызвать все перечисленные выше методы,путем нажатия на пункты меню, а также посредством нажатия кнопок на боковой панели, но не во время onEdit (e).

Кроме того, я добавил все области, которые используются другими надстройками, но напрасно. Итак, мое предположение подтвердилось, что проблема не связана с областью действия.

У меня сложилось впечатление, что некоторым умным людям удалось найти неофициальную работу, пожалуйста, дайте мне знать:)

1 Ответ

0 голосов
/ 08 октября 2019

Вы правы на все ваши подходы. И да, это намеренное поведение, описанное в режимах авторизации .

Эти надстройки используют пользовательские меню , чтобы использовать формулу, которая проверяет ячейку после вызовакнопка.

В этой документации вы можете найти информацию для разработки вашего оповещения. Пожалуйста, опишите, что вы пытаетесь сделать, чтобы я мог помочь вам лучше, в противном случае попросите у меня больше разъяснений, не задумываясь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...