Меню надстроек не создается при публикации через G-Suite Marketplace SDK, но создается через Интернет-магазин Chrome.

Независимо от того, использую ли createAddonMenu () или createMenu (), я не могу создать меню, если надстройка установлена ​​через GSM, или при открытии с помощью «Интегрировать с Google» через G-Suite Marketplace SDK. «Тестировать как надстройку» с помощью редактора сценариев работает, установка через Интернет-магазин Chrome работает, и я понятия не имею, что может быть не так. Я не уверен, что сценарий запускается в первую очередь.

Я пробовал существующие решения от StackOverflow, такие как вызов функций в другом порядке, но ничего не работает.

Кто-нибудь знает, что может помешать надстройке / скрипту работать с GSM?

Вот функции onOpen и onInstall, которые я использовал.

function onOpen(e) {
  if(LOGENAB){console.log("onOpen...");}
  if(LOGENAB){console.log(e.authMode);}
  if(e && e.authMode == ScriptApp.AuthMode.NONE){
    // Authorization needed
    if(LOGENAB){console.log("# Authorization required!");}
    var ui = FormApp.getUi();
    var menu = ui.createMenu('title');
    menu.addItem('Authorize', 'authorizeAddon');
    menu.addToUi();
  } else {
    // Authorization not needed
    if(LOGENAB){console.log("# Authorization OK!");}
    var ui = FormApp.getUi();
    var menu = ui.createMenu('title');
   menu.addItem('Control Panel', 'showControlPanel');
   menu.addItem('About', 'showAbout');
   menu.addItem('Reset running status','toggleStatus');
   menu.addToUi();
  }
}
function onInstall(e) {
  if(LOGENAB){console.log("onInstall...");}
  onOpen(e);
}

person Tyaisurm    schedule 07.07.2019    source источник
comment
Добавьте стенограмму выполнения и ошибки при сбоях выполнения из script.google.com   -  person Rubén    schedule 07.07.2019
comment
Я бы обернул весь код вашей onOpen() функции в try/catch, а в блоке catch использовал console.error('Error on open ' + e), который будет регистрировать ошибку в Stackdriver. Пользователю не нужно авторизовывать какие-либо разрешения для использования console.error() Похоже, что вы используете глобальную переменную с именем LOGENAB Глобальные переменные могут привести к ошибке onOpen(). Я бы не стал использовать функцию onOpen для проверки статуса авторизации или для отображения различных меню. Я бы просто обычное меню построил. С какой проблемой авторизации вы пытаетесь справиться?   -  person Alan Wells    schedule 07.07.2019
comment
При использовании глобальной переменной не присваивайте значение глобальной переменной в глобальном пространстве. Вы можете определять глобальные переменные и не присваивать им значение в глобальном пространстве, а затем присваивать им значение, запустив функцию. Если вы присвоите значение глобальной переменной в глобальном пространстве, это вызовет ошибку, которая остановит выполнение вашей функции onOpen (). Если надстройка была установлена, но пользователь отменил авторизацию, надстройка может быть установлена, но не авторизована. Но когда пользователь что-то делает, он должен автоматически получать запрос на авторизацию.   -  person Alan Wells    schedule 07.07.2019
comment
@AlanWells Я пробовал это, но ничего не работает. Версия GSM просто не работает. Похоже, что onOpen и onInstall никогда не вызываются. Я удалил из них весь остальной код и заменил его на console.error (). В журналах Stackdriver ничего не отображается.   -  person Tyaisurm    schedule 07.07.2019
comment
Все, что я могу сделать, это предположить, но, возможно, это как-то связано с тем, как настроен Google Cloud Project. Области должны быть определены в ДВУХ местах: 1) SDK GSuite Marketplace и 2) API и службы - ›Учетные данные -› Экран согласия OAuth. Кроме того, если вам нужно избежать использования ограниченных областей, вам нужно будет настроить области в файле appsscript.json. К сожалению, мы, вероятно, никогда не получим ответа от Google о том, в чем заключается настоящая проблема, так что остается метод проб и ошибок, пока он, надеюсь, не начнет работать.   -  person Alan Wells    schedule 07.07.2019
comment
@AlanWells Области настроены, и экран согласия проверен. GSM SDK включен, как указано в документации. Я тоже совершенно не разбираюсь в этом. Это просто не сработает.   -  person Tyaisurm    schedule 07.07.2019
comment
Это может быть ошибка, но документирование действий по воспроизведению проблемы может занять много времени. Вам нужно будет создать новый файл сценария приложений, начав с очень простого, простого кода, который ничего не делает, кроме создания меню. Если это сработает, снова добавьте файлы и код и продолжайте повторную публикацию, пока меню не появится. Тогда вы узнаете, какой код вызывает проблему, потому что это будет последний добавленный код. Но это может занять много времени, и он все равно может не найти проблему, если это проблема с Marketplace.   -  person Alan Wells    schedule 08.07.2019
comment
Если вы начали с очень простого, урезанного кода, но проблема не исчезла, я бы сказал, что это что-то связано с процессом публикации, а не с вашим кодом. Если что-то связано с процессом публикации, то это, очевидно, вне нашего контроля, если только не будет какой-то уловки для правильной настройки. Система публикации надстроек в настоящее время находится в процессе перехода от Chrome Web Store к GSuite Marketplace, поэтому Google, возможно, еще не решила все проблемы.   -  person Alan Wells    schedule 08.07.2019
comment
@AlanWells Действительно, у них идет переход. Я тестировал новый проект GCP с onOpen, onInstall и testfunction (~ 10 строк кода), и возникла та же проблема: ничего не отображается, пользовательский интерфейс или журналы.   -  person Tyaisurm    schedule 09.07.2019
comment
Вот официальный адрес электронной почты Google, по которому можно оставить отзыв о процессе проверки OAuth: [email protected] Я бы проинформировал их о проблеме. Этот адрес электронной почты изначально был размещен в группе Google по адресу: groups.google.com/forum / #! searchin / google-apps-script-community /   -  person Alan Wells    schedule 09.07.2019
comment
Работает ли код без условия if (LOGENAB)? developers.google.com/ gsuite / add-ons / concepts / menus: Предупреждение. Если вы попытаетесь выполнить действия, требующие авторизации, когда режим авторизации - ScriptApp.AuthMode.NONE, это приведет к ошибке. Это может помешать отображению меню надстройки. Надстройки должны создать начальное меню до того, как надстройка будет авторизована пользователем, и добавить пункт меню на основе свойств (не работает в AuthMode.NONE). Дополнительная полезная информация: developers.google.com/gsuite/ дополнения / концепции /   -  person ziganotschka    schedule 27.07.2019
comment
@ziganotschka Это не должно быть проблемой. Я уже пробовал решение, в котором все глобальные переменные были заменены на локальные. Безуспешно. И, как уже говорилось, только у G-Suite Marketplace и G-Suite Marketplace SDK есть это, похоже, даже не проблема.   -  person Tyaisurm    schedule 28.07.2019


Ответы (1)


Дополнения, опубликованные как частные, не отображались в редакторе со старой версией сервисов G-Suite при установке через GSM. Похоже, это исправлено в текущей версии сервиса.

person Tyaisurm    schedule 31.01.2020