Google Appscript IDE:缺少发布到Chrome网上应用店的选项?

时间:2017-03-16 18:32:20

标签: google-apps-script gmail chrome-web-store

我正在尝试制作一个收件箱监听器元素,以自动将包含特定主题行的邮件内容拖到Google电子表格中进行报告。我希望这个GitHub Project可以解决问题,我已经制作了应该处理它的Google Appscript项目。此过程的一部分是通过在Chrome网上应用店中将其作为草稿发布来验证项目所有权。 According to Google's documentation,应该在发布功能下,但我没有在那里看到,或者在脚本编辑器中的任何地方。谁能告诉我我做错了什么,或者这个功能是否被禁用了?

以下是我的IDE中菜单的样子。

Cannot Find Publish to Webstore Option

谢谢!

GAS代码

main.gs

<meta name="google-site-verification" content="eA0WbBgImGB_wcsnSADjvwnCBaNyrSifyyxuNhHSXf8" />
var PROJECTID = 'api-project-...';
var WEBHOOK_URL = 'My custom project URL'

function doPost(e){
  var postBody = JSON.parse(e.postData.getDataAsString());
  var messageData = Utilities.newBlob(Utilities.base64Decode(postBody.message.data)).getDataAsString();
  var ss = SpreadsheetApp.openById('...').getSheetByName("Log");
  ss.appendRow([new Date(), messageData, JSON.stringify(postBody,undefined,2)])
  return 200;
}

function setupPubSub(){
  var newTopic = CreateTopic("mailTrigger");
  newTopic.setIamPolicy(addGmailPolicy());
  Logger.log(newTopic.getName());
  var newSub = CreateSubscription("mailTrigger",newTopic.getName(),WEBHOOK_URL);
}

function disEnrollEmail(email){
  var email = email || "me";
  var res = UrlFetchApp.fetch("https://www.googleapis.com/gmail/v1/users/"+email+"/stop",{method:"POST",headers:{authorization:"Bearer "+ScriptApp.getOAuthToken()}});
  Logger.log(res.getContentText());
}

function enrollEmail(email){
  var email = email || "me";
  PubSubApp.setTokenService(getTokenService())
  var topicName = PubSubApp.PublishingApp(PROJECTID).getTopicName("mailTrigger")
  Logger.log(watchEmail(topicName,{labelIds:["INBOX"], email:email}));
}

helper.gs

function addGmailPolicy(Policy){
  return PubSubApp.policyBuilder()
  [(Policy)?"editPolicy":"newPolicy"](Policy)
  .addPublisher("SERVICEACCOUNT", 'gmail-api-push@system.gserviceaccount.com')
  .getPolicy();
}

function addDomainSubs(Domain,Policy){
  return PubSubApp.policyBuilder()
  [(Policy)?"editPolicy":"newPolicy"](Policy)
  .addPublisher("DOMAIN", Domain)
  .getPolicy();
}

function getSubscriptionPolicy(){
  return PubSubApp.policyBuilder()
  .newPolicy()
  .addSubscriber("DOMAIN","ccsknights.org")
}


function watchEmail(fullTopicName,watchOptions){
  var options = {email:"me",token:ScriptApp.getOAuthToken(),labelIds:[]};

  for(var option in watchOptions){
    if(option in options){
      options[option] = watchOptions[option];
    }
  }
   Logger.log(options);
  var url = "https://www.googleapis.com/gmail/v1/users/"+options.email+"/watch"

  var payload = {
    topicName: fullTopicName,
    labelIds: options.labelIds
  }

  var params = {
    method:"POST",
    contentType: "application/json",
    payload: JSON.stringify(payload),
    headers:{Authorization: "Bearer "+ options.token
    },
    muteHttpExceptions:true
  }

   var results = UrlFetchApp.fetch(url, params);

  if(results.getResponseCode() != 200){
     throw new Error(results.getContentText())
  }else{
    return JSON.parse(results.getContentText());
  }

 }

function CreateTopic(topicName) {
  var topic;
  PubSubApp.setTokenService(getTokenService());
  var pubservice = PubSubApp.PublishingApp(PROJECTID);
  try{topic = pubservice.newTopic(topicName)}
  catch(e){topic = pubservice.getTopic(topicName);}
  return topic;  
}

function CreateSubscription(subscriptionName,topicName,webhookUrl){
  var sub;
  PubSubApp.setTokenService(getTokenService());
  var subService = PubSubApp.SubscriptionApp(PROJECTID);
  try{sub = subService.newSubscription(subscriptionName,topicName,webhookUrl)}
  catch(e){sub = subService.getSubscription(subscriptionName,topicName,webhookUrl)}
  return sub;
}


function getTokenService(){
  var jsonKey = JSON.parse(PropertiesService.getScriptProperties().getProperty("jsonKey"));  
  var privateKey = jsonKey.private_key;
  var serviceAccountEmail = jsonKey.client_email; 
  var sa = GSApp.init(privateKey, ['https://www.googleapis.com/auth/pubsub'], serviceAccountEmail);
  sa.addUser(serviceAccountEmail)
  .requestToken();
  return sa.tokenService(serviceAccountEmail);
}


function requestGmailScope_(){GmailApp.getAliases()}

2 个答案:

答案 0 :(得分:0)

在Chrome网上应用店中注册”选项仅适用于standalone scripts。 这意味着,如果此脚本绑定到Google表格,文档,表单或脚本显示在Google云端硬盘中的文件中,则“在Chrome网上应用店中注册”不可用。

您可以通过查看此“https://www.google.com/script/start/”中的发布来验证它。这个可以在发布中选择“在Chrome网上应用店中注册”。

通过查看在云端硬盘中创建的电子表格的脚本编辑器,在“发布”部分中找不到“在Chrome网上应用店中注册”。

希望这些信息对您有所帮助。

答案 1 :(得分:0)

事实证明我无法在我的工作帐户下构建应用程序脚本,因为我的浏览器默认为我的个人Gmail帐户。重置浏览器并连接为我的工作帐户首先解决了问题。为了将来参考,您必须在Script.Google.com下创建脚本,以便它们可以通过网上商店共享。如果必须,您可以通过重置浏览器历史记录或以隐身模式运行Chrome来绕过此类身份验证问题。

很棒,KENDi!