Я застрял на 3 дня, пытаясь заставить 2 гаджета Google надежно общаться на сайте Google для обмена информацией о сеансе анонимного пользователя на основе значения UiInstance.getId (). Поскольку функция pubsub между гаджетами устарела, я пытаюсь использовать ContentService в серверном гаджете для обслуживания запроса doPost, исходящего от клиентского гаджета - идея в том, что я сохраню информацию о сеансе в серверном гаджете и извлечу данные в гаджеты на других страницах сайта - не уверен, возможно ли это.
НО, я застрял, даже пытаясь повозиться с различными примерами ContentService, опубликованными на StackOverflow. Я застрял на очень простом шаге и не могу выйти за рамки сверхпростого серверного кода, приведенного ниже. Я не могу понять, какой URL-адрес серверного гаджета мне нужно использовать из моего клиентского гаджета. Кажется, я получаю запутанные результаты.
Код сервера:
function doGet(e) {
var output = ContentService.createTextOutput();
output.setContent("Hi from ContentServer!");
return output;
}
Шаги, которые я сделал:
1) Опубликовал сервер как веб-приложение и настроил его так, чтобы любой / анонимный пользователь мог получить к нему доступ.
2) Всплывающее окно публикации сообщает, что гаджет доступен по адресу google.com/macros/s/AKfycbyIa07kBC-gqG0nJq3Up5GzUntbTaYcM1KmaYF7vQvFIWN_qxA/exec
3) Если я использую браузер для открытия ссылки, я получаю «Неизвестный макрос doGet».
4) Если я нажму на ссылку «Проверить веб-приложение для вашего последнего кода». из публикации всплывающего окна, кажется, взять меня к https://script.googleusercontent.com/echo?user_content_key=WwuWW_Hhp2wlHpHWsX-qAwu7jtKrwlt1fkkesojKEWeJXKm5AoUOhuRHxu4RIHLrWovOBUsHhOB3No0RYr05RE4tWtliFlXKm5_BxDlH2jW0nuo2oDemN9CCS2h10ox_1xSncGQajx_ryfhECjZEnG5I1NuldcVdfVF6dOROkmljXtr0dWIARhfeRbamxWJIIJeMc5tWnrGPpehwqDtynQ&lib=MfYY3NqJ0IdcpreIfwd3uwgmzn1S_adTp
Приведенная выше ссылка из шага 4 работает в браузере, НО она очень нестабильна с моего клиентского гаджета! Кажется, он работает в самый первый раз, когда я публикую и публикую его, но возвращает необработанный HTML, если я обновляю версию хотя бы один раз.
Я считаю, что мне не хватает какого-то тривиального шага, ИЛИ существует серьезная ошибка контроля версий или развертывания гаджетов веб-приложений.
Я проверил следующие потоки в stackoverflow, которые были очень полезны. Как использовать ContentService и doPost для создания REST API
KamilG, похоже, решил проблему здесь Другой doGet () проблема с скриптом Google Apps - неизвестная ошибка макроса doGet
Но для меня это очень шатко, и я не могу определить какую-либо надежную процедуру, чтобы получить 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;
}
Нужна помощь, пожалуйста.