Google Apps脚本 - 应用未经过验证,@ OnlyCurrentDoc大幅降低了脚本速度

时间:2017-12-04 08:28:19

标签: google-apps-script

我有一个电子表格,可以通过App Script在基于时间的触发器上从API获取数据,其他用户可以复制这些数据以查看自己的数据(数千人正在使用它)。该脚本非常简单,它通过UrlFetchApp.fetch()获取数据并将其放入电子表格中,并且它具有一个人们可以在首次复制电子表格后调用以设置基于时间的触发器的功能(触发器不能被复制)。

几个月前,在授权App脚本运行时,制作副本的用户面临“此应用未经验证”屏幕。我知道这是由于谷歌改变了安全性,但我无法找到一种方法来正确摆脱未经验证的状态。这就是我试过的:

  1. 将我的项目验证为开发人员。这不起作用,因为当人们制作电子表格的副本时,这是一个他们自己拥有的新项目 - 当然,其他用户在刚刚通过复制创建项目时没有验证项目。
  2. @OnlyCurrentDoc添加到电子表格的顶部。这在技术上有效,但只添加@OnlyCurrentDoc会导致脚本的运行时间从4秒增加到180秒。
  3. 可以在https://wowaudit.com/copy处制作电子表格的副本,这是触发“未经验证的应用”消息的脚本代码,并且需要花费更长的时间来添加@OnlyCurrentDoc代码段:

    /**
     * @OnlyCurrentDoc
     */
    
    function CreateTrigger() {
      // First delete old triggers
      var allTriggers = ScriptApp.getProjectTriggers();
      for (var i = 0; i < allTriggers.length; i++) {
        ScriptApp.deleteTrigger(allTriggers[i]);
      }
    
      // Then create new triggers
      var sheet = SpreadsheetApp.getActiveSpreadsheet();
      var interval = sheet.getRange("RefreshSetting").getValue().slice(0,2);
      ScriptApp.newTrigger("Fetch").timeBased().everyMinutes(interval).create();
      ScriptApp.newTrigger("Refresh").forSpreadsheet(sheet).onEdit().create();
    
      // Then give user feedback of success 
      if (ScriptApp.getProjectTriggers().length == 2) {
        sheet.getRange('Settings!B24').setValue('The sheet is automatically refreshing!');
        sheet.getRange('Settings!B24').setBackground('#b6d7a8');
      } else {
        sheet.getRange('Settings!B24').setValue('Click here to start automatic refreshing!');
        sheet.getRange('Settings!B24').setBackground('#ea9999');
      }
    }
    

    有没有人知道一种方法可以阻止“未验证的应用程序”消息出现在我的场景中,或者为什么@OnlyCurrentDoc标志会使脚本放慢速度(基本上使其无法使用)?

    感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是您测试应用时的预期行为。如果您想要删除此消息,您可以:

  1. Publishing your app as an Add-on
  2. 拥有一个域并拥有verified ownership with Google