1

我正在构建一个附加组件,需要检查客户还剩下多少个单位。此代码适用于我作为开发人员,但是当用户实际安装应用程序时它不起作用。

// When someone opens the sheet for the first time
function onOpen(e) {
    var ui = SpreadsheetApp.getUi()
        .createAddonMenu()
        .addItem('SMS', 'sms')
        .addItem('EMAIL', 'email')
        .addItem('SMS and EMAIL', 'emailAndSMS')
        .addToUi();
}

// The function for the SMS Side Bar
// It is here I run the code for getting the users email address. 
// Nothing is logged to the console at all.

function sms() {
    var html = HtmlService.createHtmlOutputFromFile('sms').setTitle('Heartbeat SMS');
    SpreadsheetApp.getUi().showSidebar(html);
    var userEmail = Session.getActiveUser().getEmail();
    Logger.log(userEmail); // Nothing gets logged to the console.
}

我希望看到用户的电子邮件地址被记录,但是我得到一个空字符串

4

1 回答 1

0

根据getActiveUser() 上的文档

电子邮件地址可用的情况各不相同:例如,用户的电子邮件地址在任何允许脚本在未经用户授权的情况下运行的上下文中都不可用,例如简单的 onOpen(e) 或 onEdit(e) 触发器、 Google 表格中的自定义函数,或部署为“以我身份执行”的网络应用程序(即由开发人员而非用户授权)。

因此,当他们无法使用它们时,部署您的应用程序将是这些场景之一。文档继续说:

但是,如果开发者自己运行脚本或与用户属于同一个 G Suite 域,则这些限制通常不适用。

这意味着如果另一个用户从例如 GAS 编辑器运行您的脚本,它就会工作。为了您的工作意图,他们需要以某种方式提交他们的地址,无论是表格、文档还是附加组件的一部分。

于 2019-08-20T10:36:05.270 回答