2012-11-09 48 views
1

我被困3天,現在試圖讓2谷歌小工具可靠地溝通在谷歌網站上交換基於UiInstance.getId()值的匿名用戶會話信息。由於小工具到小工具的pubsub功能已被棄用,我試圖使用服務器小工具中的ContentService來處理源自客戶端小工具的doPost請求 - 我的想法是,我將會話信息存儲在服務器小工具中,然後拉將數據轉換爲網站中其他頁面上的小工具 - 不知道這是否可行。Google應用腳本:ContentService網絡應用使用情況

但是,我甚至試圖修改StackOverflow上發佈的ContentService上的各種示例。我被困在一個非常基本的步驟,無法超越下面的超級簡單的服務器代碼。我無法弄清楚我需要從我的客戶端小工具中使用的服務器小工具的網址。我似乎正在得到令人困惑的結果。

Server代碼:

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

我的步驟如下:

1)發佈的服務器作爲Web應用程序和設定,讓任何人/匿名可以訪問它。

2)發佈窗口彈出稱,小工具可在 https://script.google.com/macros/s/AKfycbyIa07kBC-gqG0nJq3Up5GzUntbTaYcM1KmaYF7vQvFIWN_qxA/exec

3)如果我用瀏覽器打開鏈接,我得到「未知宏觀的doGet」。

4)如果我點擊「Test web app for your latest code」給出的鏈接。從發佈窗口彈出,它似乎帶我到 https://script.googleusercontent.com/echo?user_content_key=WwuWW_Hhp2wlHpHWsX-qAwu7jtKrwlt1fkkesojKEWeJXKm5AoUOhuRHxu4RIHLrWovOBUsHhOB3No0RYr05RE4tWtliFlXKm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnG5I1NuldcVdfVF6dOROkmljXtr0dWIARhfeRbamxWJIIJeMc5tWnrGPpehwqDtynQ&lib=MfYY3NqJ0IdcpreIfwd3uwgmzn1S_adTp

以上從第4步的鏈接工作從瀏覽器,但它的非常片狀從我的客戶端小工具!它似乎在我第一次版本併發布它時工作,但如果我更新版本,即使返回一次,也會返回原始HTML。

我相信我錯過了一些微不足道的步驟,或者存在嚴重的Web應用程序小工具的版本控制或部署錯誤。

我檢查了以下線程是非常有用的stackoverflow。 How to use ContentService and doPost to create a REST API

KamilG似乎已經解決這裏的問題Another doGet() issue with Google Apps Script - "Unknown macro doGet" error

但其對我來說非常不穩定,我無法拖住任何可靠的程序獲得從contentService的我的服務器的小工具的工作。

任何幫助和解釋將不勝感激。

這是我的客戶端小工具代碼。

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; 
} 

需要幫助。

回答

2

這種功能大部分都是按照預期運作的,但我認爲可能有一些替代方案。

  1. 關於你的要點#3 - 上面的URL起作用。您測試的版本肯定有問題(也許您沒有正確聲明doGet?)。
  2. 來自#4的鏈接是在您使用內容服務時發生的一次性使用重定向。請參閱底部的重定向部分here。這個鏈接是短暫的,你可能會很快在瀏覽器中捕捉到它,但另一個單獨的調用客戶端(「小工具」)可能不那麼幸運。所以你不應該直接調用googlecontentservice.com鏈接。
  3. 關於ContentService的整體問題,我沒有看到這個。如果我正確使用/ exec鏈接,然後在每次適當的更改後正確地增加版本,那麼按照我的預期工作。

我構建了一個簡單的Web應用程序來訪問您的內容服務,並且事情似乎對我始終如一地正常工作。見下文。該代碼看起來與您的代碼完全相同,但我正在使用第一個網址。

https://script.google.com/macros/s/AKfycbw6nlfv5ME6F3Z2WBdW24YAgfQm_E5gYV0xrMDvDwZLrX7PdMU/exec

作爲替代方案 - 在那裏你是從一個腳本做一個服務器端網址抓取到另一個理由嗎?如果你可以訪問數據服務器端,你可以在UI腳本中執行內容腳本的邏輯嗎?

+0

謝謝阿倫,我看到你的指針一貫的行爲。我想用googleusercontent網址導致我的困惑。 基本上我需要匿名用戶的會話管理。瀏覽器和會話類沒有唯一的密鑰來跟蹤服務器的會話。有沒有辦法跟蹤網站頁面之間的會話,而不需要用戶通過谷歌帳戶登錄? 我開始探索ContentService doPost/doGet API來查看我是否可以實現上述目標。如果ContentService不適用於此,請提供我可以追求的其他想法。我也編輯過這個標題。 – Siva

相關問題