onOpen()中的授权失败

时间:2015-07-01 16:38:08

标签: google-apps-script google-sheets triggers google-contacts

目标:

使用Google脚本附加组件,我想将一些联系信息从Google电子表格推送到Google通讯录,而用户互动最少。

问题:

无论我做什么,我总是得到授权失败。

  1. 当我在“已安装”模式下测试下面的脚本时,我收到一条错误消息:脚本执行失败:您没有相应的授权来执行此操作。 (第6行)
  2. 当我在“启用”或“已安装并启用”模式下测试下面的脚本时,我收到一条错误消息:脚本执行失败:您无权调用getContactGroup。 (第11行)
  3. (注意:我翻译了来自法语的错误信息,这是我的语言,所以原来的英文信息可能略有不同。我也重新编号并打印代码)

     1 function onInstall(e) {
     2   onOpen(e);
     3 }
     4
     5 function onOpen(e) {
     6  var spreadsheetName = SpreadsheetApp.getActiveSpreadsheet().getName();
     7  createContactsGroupIfNotExists(spreadsheetName);
     8 }
     9
    10 function createContactsGroupIfNotExists(contactsGroupName) {
    11   var group = ContactsApp.getContactGroup(contactsGroupName)
    12   
    13   if(! group)
    14     contactsGroup = ContactsApp.createContactGroup(contactsGroupName);
    15   
    16   return group;
    17 }
    

    我可以解释我得到的第一个错误,因为脚本无法访问它链接到的电子表格。但是一旦启用(甚至启用并安装)脚本,它就不应该正确访问用户联系人。

    Google documentation about authorizations表示onOpen()触发器在AuthMode.LIMITED中运行,可防止对用户数据进行不必要的访问。但我希望尽可能无声地运行脚本(例如只要求授权一次)。

    有什么建议吗?

1 个答案:

答案 0 :(得分:0)

对于第二个错误,即使启用了加载项,onOpen()也无法访问user's data,因此您无法调用ContactsApp.getContactGroup(contactsGroupName)

您不必多次请求授权,只需在另一个功能中调用ContactsApp.getContactGroup(contactsGroupName)(可能由add-on menu中的项目或sidebar中的按钮触发,或者dialog