【问题标题】:Missing publish to Chrome Web Store option for web applicationWeb 应用程序缺少“发布到 Chrome 网上应用店”选项
【发布时间】:2017-03-16 18:32:19
【问题描述】:

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

这是我的 IDE 中的菜单。

改编自 OP 对已接受答案的评论

 

该脚本绝对不包含在 Google 文档或电子表格中,但它位于与 Google 站点相关联的工作区中。有趣的是,我尝试按照KENdi's answer 中的链接在我的工作帐户下编辑应用程序脚本,但我被告知我没有> 生成该级别应用程序脚本的权限。我会向我的管理员发送一封电子邮件,看看我是否可以提升权限,以便我可以通过此渠道发布。


气体代码

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()}

【问题讨论】:

  • 更新:我在这里找到了一篇类似的文章,但它解决了附加到文档的容器绑定脚本。我的是一个独立的项目。链接:stackoverflow.com/questions/12982276/…
  • 当您发布 Web 应用程序时,您是否为“谁有权访问该应用程序”选择了 任何人 您是否至少发布了一个版本?
  • 我将应用程序发布到版本 2,并设置为允许我工作域中的任何人访问它。我将其设置为以我自己的身份执行,但我将其更改为以用户身份执行,但没有任何改变。

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


【解决方案1】:

在 Chrome 网上应用店注册”选项仅在 standalone scripts 中可用。 这意味着,如果此脚本绑定到 Google 表格、文档、表单或脚本出现在您在 Google Drive 中的文件中,则此“在 Chrome 网上应用店注册”不可用。

您可以通过检查此“https://www.google.com/script/start/”中的发布来验证它。这个在发布时会有一个“Register in Chrome Web Store”选项。

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

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

【讨论】:

  • 谢谢,肯迪。该脚本绝对不包含在 Google 文档或电子表格中,但它位于与 Google 站点相关联的工作区中。有趣的是,我尝试按照您的链接在我的工作帐户下编辑 Appscripts,但我被告知我无权在该级别生成应用程序脚本。我会向我的管理员发送一封电子邮件,看看我是否可以提升权限,以便我可以通过此渠道发布。
【解决方案2】:

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

伟大的收获,KENDi!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多