编写附加清单文件

时间:2018-02-13 17:13:39

标签: google-apps-script google-apps-script-addon

我使用Packt的书“学习Google Apps脚本”中的示例在我的云端硬盘上创建了一个GAS脚本文件。我的问题是如何将其变成附加组件。我不太确定我需要创建的清单文件(即使在阅读https://developers.google.com/gmail/add-ons/how-tos/building之后)。

function saveEmailAttachmentsToDrive(){

  // Create 'Gmail Attachments' folder if not exists.
  createFolder_('Gmail attachments');

// Get inbox threads starting from the latest one to 100.
  var threads = GmailApp.getInboxThreads(0, 100);

  var messages = GmailApp.getMessagesForThreads(threads);

  var folderID = PropertiesService.getUserProperties()
      .getProperty("FOLDER");

  var file, folder = DriveApp.getFolderById(folderID);

  for (var i = 0 ; i < messages.length; i++) {
    for (var j = 0; j < messages[i].length; j++) {
      if(!messages[i][j].isUnread()){

        var msgId = messages[i][j].getId();

        // Assign '' if MSG_ID is undefined.
        var oldMsgId = PropertiesService.getUserProperties()
            .getProperty('MSG_ID') || '';

        if(msgId > oldMsgId){
          var attachments = messages[i][j].getAttachments();

          for (var k = 0; k < attachments.length; k++) {
            PropertiesService.getUserProperties()
              .setProperty('MSG_ID', messages[i][j].getId());

            try {
              file = folder.createFile(attachments[k]);
              Utilities.sleep(1000);// Wait before next iteration.
            } catch (e) {
              Logger.log(e);
            }
          }

        }
        else return;

      }
    }
  }

};


function createFolder_(name) {
  var folder, folderID, found = false;

  /*
   * Returns collection of all user folders as an iterator.
   * That means it do not return all folder names at once, 
   * but you should get them one by one.
   *
   */
  var folders = DriveApp.getFolders();

  while (folders.hasNext()) {
    folder = folders.next();
    if (folder.getName() == name) {
      folderID = folder.getId();
      found = true;
      break;
    }
  };

  if (!found) {
    folder = DriveApp.createFolder(name);
    folderID = folder.getId();
  };

  PropertiesService.getUserProperties()
    .setProperty("FOLDER", folderID);

  return folderID;
}

我的问题是如何将其添加到附加组件中。我不太确定我需要创建的清单文件(即使在阅读https://developers.google.com/gmail/add-ons/how-tos/building之后)。

2 个答案:

答案 0 :(得分:1)

Apps脚本引擎会自动生成

manifest.json。它默认是隐藏的,但你可以通过切换View&gt;来查看它。清单文件以查看结构。

当您准备好测试AddOn时,您可以转到发布&gt;部署为Web添加。如果您从云编辑器上传,则无需在网上商店列表中添加单独的清单文件。

开发文档covers deployment methods

答案 1 :(得分:0)

gmail部分清单文件的JSON是:

"gmail": {
  "name": "My Gmail Add-on",
  "logoUrl": "https://www.example.com/hosted/images/2x/my-icon.png",
  "primaryColor": "#4285F4",
  "secondaryColor": "#00BCD4",
  "authorizationCheckFunction": "get3PAuthorizationUrls",
  "contextualTriggers": [{
    "unconditional": {},
    "onTriggerFunction": "buildAddOn"
  }]

那必须是已经存在的东西。它上面的清单文件非常基本,如下所示:

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER"
}

您将使其如下所示:

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "gmail": {
    "name": "My Gmail Add-on",
    "logoUrl": "https://www.example.com/hosted/images/2x/my-icon.png",
    "primaryColor": "#4285F4",
    "secondaryColor": "#00BCD4",
    "authorizationCheckFunction": "get3PAuthorizationUrls",
    "contextualTriggers": [{
      "unconditional": {},
      "onTriggerFunction": "buildAddOn"
    }]
  },
  "exceptionLogging": "STACKDRIVER"
}

使用您的timeZone和您的设置。请注意,没有列出依赖项,但请将该部分保留在。