Google App脚本:contentservice Web应用程序用法



我被困了3天,试图使2个Google小工具可靠地在Google站点上通信,以根据uiinstance.getID()value交换匿名用户会话信息。由于不推荐使用小工具到gadget pubsub功能,因此我尝试使用服务器小工具中的contentService来为源自客户端小工具的dopost请求提供服务 - 这个想法是,我将将会话信息存储在服务器小工具中并拉动。将数据输入网站其他页面上的小工具 - 不确定是否可以。

但是,我甚至试图修改Stackoverflow上发布的contentservice上的各种示例。我被困在一个非常基本的步骤中,无法超越下面的超级简单服务器代码。我无法弄清楚我需要从客户端小工具中使用的服务器小工具的URL。我似乎会得到令人困惑的结果。

服务器代码:

function doGet(e) {
  var output = ContentService.createTextOutput();
  output.setContent("Hi from ContentServer!");
  return output;
}

我遵循的步骤:

1)以Web应用程序发布了服务器并将其设置,以便任何人/匿名者都可以访问它。

2)发布窗口弹出窗口说该小工具可在 https://script.google.com/macros/s/akfycbyia07kbc-gqg0njq3up5gzuntbtaybtaycm1kmayf7vqvfiwn_qxa/exec

3)如果我使用浏览器打开链接,我会得到"未知宏"。

4)如果我单击"测试Web应用程序的最新代码"链接。从发布窗口弹出窗口中,似乎需要我

步骤4的上述链接从浏览器中工作,但我的客户小工具非常片状!它似乎是在我第一次版本并发布它的第一次工作,但是如果我甚至更新版本,则返回RAW HTML。

我相信我缺少一些微不足道的步骤,或者有一个严重的版本控制或使用Web应用程序小工具部署错误。

我已经在Stackoverflow上检查了以下线程,这些线程非常有用。如何使用ContentService和Dopost创建REST API

kamilg似乎在这里克服了这个问题。错误

,但对我来说这很颤抖,我无法固定任何可靠的过程。

任何帮助和解释都将不胜感激。

这是我的客户端小工具代码。

function doGet(e) {
//  var url = "https://script.google.com/macros/s/AKfycbyIa07kBC-gqG0nJq3Up5GzUntbTaYcM1KmaYF7vQvFIWN_qxA/exec";
  //var url = "https://script.googleusercontent.com/echo?user_content_key=9tzQxTSPm8ADsHKl4bCg6ru-49C19kYZCW8IRuWiWi-Xe_lTlQZS4xq8v5aPqjR6Ybj7-xjjJXyQPhOH0T3KFtJUtXc7U-Dkm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnJlCLn2pnKC0O1TYz53ccgjxtVC9ccM8kFegFJ0AJSK_YP_ylqfjfm1EU_BUbZUu-88PMDJ6xpj8&lib=MTLHdJRs3UPYj3bYgbhBNnNGZ7UmftE34";
  var url = "https://script.googleusercontent.com/echo?user_content_key=LvlwGkBktQ732xyD1HJbh5OhMsuhkidt_rOovw-olm-wJQF4LlErMDSxsfDaAb4UBYqOeTI3-8soIBj-KaOCDi0WlUav4Nl_m5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnG5I1NuldcVdfVF6dOROkmljXtr0dWIARhfeRbamxWJIIJeMc5tWnrGPpehwqDtynQ&lib=MfYY3NqJ0IdcpreIfwd3uwgmzn1S_adTp";
  // WELL ONE OF THE URLS WORKS FROM ABOVE!!! BUT ONLY TILL I UPDATE THE SERVER WEB APP VERSION :(
  var app = UiApp.createApplication().setTitle("ClientService Client test");
  app.setStyleAttribute("background", "azure");
  var fetchMethod = 'get';
  var response = UrlFetchApp.fetch(url, {method: fetchMethod});
  //var lbl = app.createHTML("<b>Response :</b>" + response.getContentText());
  var lbl = app.createTextArea().setText(response.getContentText());
  var lbl1 = app.createHTML("<b>Response code :</b> "
                            + response.getResponseCode()); 
  app.add(lbl);
  app.add(lbl1);
  return app;
}

需要帮助。

此功能在大多数情况下运行,但我认为可能有一些替代方案。

  1. 关于您的观点#3-上面的URL可行。您测试的版本一定有问题(也许您没有正确声明Doget?)。
  2. #4的链接是一次使用当您内容服务时发生的重定向。请参阅此处的重定向部分。此链接的寿命很短,您可能足够快以在浏览器中捕获它,但是另一个独立的呼叫客户端("小工具")可能并不那么幸运。因此,您永远不要直接致电GoogleContentservice.com链接。
  3. 关于内容服务的整体问题,我还没有看到这一点。如果我正确使用/exec链接,然后在每个适当的更改之后正确地递增版本,请按照我的预期工作。

我构建了一个简单的Web应用程序,可访问您的内容服务,并且事情似乎对我持续不错。见下文。该代码看起来与您的代码相同,但我使用的是第一个URL。

https://script.google.com/macros/s/akfycbw6nlfv5me6f3z2wbdw24yagfqm_e5gyv0xrmdvdvdwzlrx7pdmu/exec 为替代方案 - 有原因是您从一个脚本到另一个脚本执行服务器端urlfetch吗?如果您可以获取数据服务器端,可以在UI脚本中执行内容脚本的逻辑吗?

最新更新