Aplikacja internetowa to interfejs użytkownika dla akcji korzystającej z interaktywnego obszaru roboczego. Można używać istniejących technologii internetowych (takich jak HTML, CSS, JavaScript WebAssembly). Zasadniczo wersja interaktywna Obszar roboczy może renderować treści z internetu tak jak przeglądarka, ale wiąże się z kilkoma ograniczeniami jest wymuszane w związku z ochroną prywatności i bezpieczeństwem użytkowników. Zanim zaczniesz projektować swój interfejs, weź pod uwagę zasady projektowania opisane w wytycznych dotyczących projektowania. Zalecamy korzystanie z hostingu Firebase. aby wdrożyć swoją aplikację internetową.
Kody HTML i JavaScript aplikacji internetowej:
- Zainicjuj bibliotekę JavaScript interaktywnego Canvas.
- Zarejestruj wywołania zwrotne zdarzeń interaktywnego obszaru roboczego.
- Udostępnij niestandardową logikę aktualizowania aplikacji internetowej na podstawie stanu.
Na tej stronie omawiamy zalecane sposoby tworzenia aplikacji internetowej, jak włączyć komunikację między działaniem związanym z konwersją a aplikacją internetową oraz ogólnymi wskazówkami i ograniczeniach.
Polecane biblioteki
Chociaż możesz użyć dowolnej metody do utworzenia interfejsu, Google zaleca użycie następujące biblioteki:
- Greensock: do tworzenia skomplikowanych animacji.
- Pixi.js: do rysowania grafiki 2D w WebGL.
- Three.js: do rysowania grafiki 3D w WebGL.
- Rysunek na płótnie HTML5: do prostych rysunków.
Architektura
Google zdecydowanie zaleca korzystanie z architektury aplikacji składającej się z jednej strony. Ten pozwala na optymalną wydajność i wspiera ciągłość rozmów użytkowników. Interaktywnego obszaru roboczego można używać w połączeniu z interfejsem. platformy takie jak Vue, Angular i React, które pomagają w zarządzaniu państwem.
Plik HTML
Plik HTML określa wygląd interfejsu użytkownika. Ten plik wczytuje też plik interaktywny Interfejs Canvas API umożliwiający komunikację między aplikacją internetową. i akcji konwersacyjnej.
w kodzie HTML,
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Interactive Canvas Sample</title> <!-- Disable favicon requests --> <link rel="shortcut icon" type="image/x-icon" href="data:image/x-icon;,"> <!-- Load Interactive Canvas JavaScript --> <script src="https://www.gstatic.com/assistant/interactivecanvas/api/interactive_canvas.min.js"></script> <!-- Load PixiJS for graphics rendering --> <script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.8.7/pixi.min.js"></script> <!-- Load Stats.js for fps monitoring --> <script src="https://cdnjs.cloudflare.com/ajax/libs/stats.js/r16/Stats.min.js"></script> <!-- Load custom CSS --> <link rel="stylesheet" href="css/main.css"> </head> <body> <div id="view" class="view"> <div class="debug"> <div class="stats"></div> <div class="logs"></div> </div> </div> <!-- Load custom JavaScript after elements are on page --> <script src="js/log.js"></script> <script type="module" src="js/main.js"></script> </body> </html>
Komunikacja między działaniem konwersacyjnym a aplikacją internetową
Po utworzeniu aplikacji internetowej i tworzeniu akcji dotyczącej rozmów oraz załadowaniu biblioteki Canvas w pliku aplikacji internetowej, musisz określić sposób Interakcja z akcją konwersacyjną. Aby to zrobić, zmodyfikuj pliki, które zawierają Twoją aplikację internetową logikę logiczną.
action.js
Ten plik zawiera kod definiujący wywołania zwrotne i wywoływanie
metod do interactiveCanvas
. Dzięki wywołaniom zwrotnym możesz korzystać z internetu
reagować na informacje lub prośby z akcji konwersacyjnej, a metody
umożliwiają wysyłanie informacji lub żądań do czynności związanej z konwersacją.
Dodaj interactiveCanvas.ready(callbacks);
do pliku HTML, aby zainicjować i
zarejestruj wywołania zwrotne:
JavaScript
/** * This class is used as a wrapper for Google Assistant Canvas Action class * along with its callbacks. */ export class Action { /** * @param {Phaser.Scene} scene which serves as a container of all visual * and audio elements. */ constructor(scene) { this.canvas = window.interactiveCanvas; this.gameScene = scene; const that = this; this.intents = { GUESS: function(params) { that.gameScene.guess(params); }, DEFAULT: function() { // do nothing, when no command is found }, }; } /** * Register all callbacks used by the Interactive Canvas Action * executed during game creation time. */ setCallbacks() { const that = this; // Declare the Interactive Canvas action callbacks. const callbacks = { onUpdate(data) { const intent = data[0].google.intent; that.intents[intent ? intent.name.toUpperCase() : 'DEFAULT'](intent.params); }, }; // Called by the Interactive Canvas web app once web app has loaded to // register callbacks. this.canvas.ready(callbacks); } }
main.js
Moduł JavaScript main.js
importuje pliki action.js
i scene.js
oraz
tworzy wystąpienia każdego z nich podczas wczytywania aplikacji internetowej. Ten moduł również
rejestruje wywołania zwrotne Interactive Canvas.
JavaScript
import {Action} from './action.js'; import {Scene} from './scene.js'; window.addEventListener('load', () => { window.scene = new Scene(); // Set Google Assistant Canvas Action at scene level window.scene.action = new Action(scene); // Call setCallbacks to register Interactive Canvas window.scene.action.setCallbacks(); });
scene.js
Plik scene.js
tworzy scenę do aplikacji internetowej. Oto
fragment z scene.js
:
JavaScript
const view = document.getElementById('view'); // initialize rendering and set correct sizing this.radio = window.devicePixelRatio; this.renderer = PIXI.autoDetectRenderer({ transparent: true, antialias: true, resolution: this.radio, width: view.clientWidth, height: view.clientHeight, }); this.element = this.renderer.view; this.element.style.width = `${this.renderer.width / this.radio}px`; this.element.style.height = `${(this.renderer.height / this.radio)}px`; view.appendChild(this.element); // center stage and normalize scaling for all resolutions this.stage = new PIXI.Container(); this.stage.position.set(view.clientWidth / 2, view.clientHeight / 2); this.stage.scale.set(Math.max(this.renderer.width, this.renderer.height) / 1024); // load a sprite from a svg file this.sprite = PIXI.Sprite.from('triangle.svg'); this.sprite.anchor.set(0.5); this.sprite.tint = 0x00FF00; // green this.sprite.spin = true; this.stage.addChild(this.sprite); // toggle spin on touch events of the triangle this.sprite.interactive = true; this.sprite.buttonMode = true; this.sprite.on('pointerdown', () => { this.sprite.spin = !this.sprite.spin; });
Obsługuj interakcje dotykowe
Interaktywna akcja Canvas może reagować na dotyk użytkownika swoje głosy. Zgodnie z wytycznymi projektowania interaktywnego obszaru roboczego warto opracować akcję tak, by była skoncentrowana na głosie. Mając jednak na uwadze, że niektóre inteligentne Wyświetlacze obsługują interakcje dotykowe.
Wspieranie dotyku przypomina udzielanie odpowiedzi konwersacyjnych. jednak zamiast głosowego odpowiedzi użytkownika, JavaScript po stronie klienta w przypadku interakcji dotykowych i wykorzystuje je do modyfikowania elementów aplikacji internetowej.
W przykładzie widać, jak to jest Biblioteka Pixi.js:
JavaScript
… this.sprite = PIXI.Sprite.from('triangle.svg'); … this.sprite.interactive = true; // Enables interaction events this.sprite.buttonMode = true; // Changes `cursor` property to `pointer` for PointerEvent this.sprite.on('pointerdown', () => { this.sprite.spin = !this.sprite.spin; });
Rozwiązywanie problemów
Możesz wykorzystać symulator w Konsoli Actions, by przetestować Podczas tworzenia aplikacji Canvas możesz też zobaczyć błędy występujące w Interaktywna aplikacja internetowa Canvas na urządzeniach użytkowników na urządzeniach produkcyjnych. Możesz wyświetlić te w dziennikach Google Cloud Platform.
Aby wyświetlić te komunikaty o błędach w Google Cloud Dzienniki platformy, wykonaj te czynności:
- Otwórz projekt Actions w Konsoli Actions.
- Kliknij Przetestuj w menu nawigacyjnym u góry.
- Kliknij link Wyświetl logi w Google Cloud Platform.
Błędy użytkowników urządzenia są wyświetlane w przeglądarce logów w kolejności chronologicznej.
Typy błędów
W logach Google Cloud Platform mogą wystąpić 3 typy błędów aplikacji internetowej:
- Czasy oczekiwania, które występują, gdy usługa
ready
nie zostanie wywołana w ciągu 10 sekund - Czasy oczekiwania, które występują, gdy obietnica zwrócona przez
onUpdate()
nie zostanie zrealizowana w ciągu 10 sekund - Błędy czasu działania JavaScriptu, które nie zostały wykryte w Twojej aplikacji internetowej
Wyświetl szczegóły błędu JavaScriptu
Szczegóły błędów środowiska wykonawczego JavaScriptu w aplikacji internetowej nie są domyślnie dostępne. Aby zobaczyć szczegóły błędów środowiska wykonawczego JavaScriptu, postępuj zgodnie z instrukcjami wykonaj te czynności:
- Sprawdź, czy masz skonfigurowane odpowiednie udostępnianie zasobów między domenami Nagłówki odpowiedzi HTTP (CORS) w plikach aplikacji internetowej. Aby dowiedzieć się więcej, zobacz Udostępnianie zasobów między domenami.
- Dodaj
crossorigin="anonymous"
do zaimportowanych tagów (<script>
) w Plik HTML zgodnie z tym fragmentem kodu:
<script crossorigin="anonymous" src="<SRC>"></script>
Wytyczne i ograniczenia
Podczas tworzenia kampanii pamiętaj o tych wytycznych i ograniczeniach Twoja aplikacja internetowa:
- Brak plików cookie
- Brak pamięci lokalnej
- Brak geolokalizacji
- Nie używa kamery
- Brak nagrywania dźwięku i obrazu
- Brak wyskakujących okienek
- Nie przekraczaj limitu 200 MB pamięci
- Podczas renderowania treści weź pod uwagę nagłówek Nazwa działania (zaj. górnej części ekranu)
- Do filmów nie można zastosować żadnych stylów
- Można używać tylko jednego elementu multimedialnego naraz
- Brak bazy danych Web SQL
- Interfejs
SpeechRecognition
Web Speech API nie jest obsługiwany. - Nie można zastosować ustawienia trybu ciemnego
- Odtwarzanie filmów jest obsługiwane na inteligentnych ekranach. Więcej informacji na temat obsługiwane formaty kontenerów multimediów i kodeki znajdziesz w artykule o kodekach Google Nest Hub.
Udostępnianie zasobów między domenami
Ponieważ aplikacje internetowe Interaktywne Canvas są hostowane w elemencie iframe, a źródło jest ustawione do wartości null, musisz włączyć udostępnianie zasobów między domenami (CORS). dla serwerów WWW i zasobów pamięci masowej. Ten proces umożliwia komponentom akceptuj żądania z pustych źródeł.
- Jeśli multimedia i obrazy są hostowane przez Firebase, przeczytaj artykuł Utwórz niestandardowe linki dynamiczne w domenie, aby skonfigurować CORS.
- Jeśli Twoje multimedia i obrazy znajdują się w Cloud Storage, zapoznaj się z artykułem Konfigurowanie udostępniania zasobów między domenami (CORS) aby skonfigurować CORS.
Dalsze kroki
Aby dodać więcej funkcji do aplikacji internetowej, zapoznaj się z artykułem Kontynuuj tworzenie z klientem lub realizacja po stronie serwera.