ウェブアプリは、Interactive Canvas を使用するアクションのユーザー インターフェース(UI)です。 既存のウェブ技術(HTML、CSS、JavaScript、 WebAssembly など)を使用して、ウェブアプリの設計と開発を行います。ほとんどの場合、インタラクティブは Canvas は、ウェブ コンテンツをブラウザのようにレンダリングできますが、いくつかの制限があります。 セキュリティを確保するために 適用されますUI の設計を始める前に 設計ガイドラインに記載されている設計原則を考慮してください。 Firebase Hosting を使用することをおすすめします。 ウェブアプリをデプロイします
ウェブアプリの HTML と JavaScript では、次のことを行います。
- Interactive Canvas JavaScript ライブラリを初期化します。
- Interactive Canvas のイベント コールバックを登録します。
- 状態に基づいてウェブアプリを更新するカスタム ロジックを提供する。
このページでは、ウェブアプリの作成で推奨される方法、 会話型アクションとウェブアプリ間の通信、および一般的なガイドライン 制限します。
推奨ライブラリ
UI はどの方法でも作成できますが、 主なライブラリは次のとおりです。
- Greensock: 複雑なアニメーションを作成する場合。
- Pixi.js: WebGL で 2D グラフィックを描画する場合。
- Three.js: WebGL で 3D グラフィックを描画する場合。
- HTML5 Canvas の描画: シンプルな描画の場合。
アーキテクチャ
シングルページ アプリケーション アーキテクチャを使用することを強くおすすめします。この 最適なパフォーマンスを実現し、継続的な会話を 向上させることができますInteractive Canvas はフロントエンドと併用できる Vue、Angular、React などのフレームワークを使用して、 状態管理に役立ちます。
HTML ファイル
HTML ファイルで UI の外観を定義します。このファイルは、インタラクティブ モードの Canvas API。これにより、ウェブアプリ間の通信が可能になります。 会話型アクションを作成します
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>
会話型アクションとウェブアプリ間の通信
ウェブアプリと会話型アクションを作成し、インタラクティブ スペースに読み込んだら、 使用する場合は、ウェブアプリと Canvas の 会話型アクションは相互作用します。そのためには、ウェブアプリを含むファイルを修正します。 できます。
action.js
このファイルには、コールバックを定義し、
interactiveCanvas
によるメソッド。コールバックを使用すると
会話型アクションからの情報やリクエストに応答する一方で、
会話型アクションに情報やリクエストを送信する方法を提供する。
interactiveCanvas.ready(callbacks);
を HTML ファイルに追加して初期化と
コールバックを登録します。
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
main.js
JavaScript モジュールは、action.js
ファイルと scene.js
ファイルをインポートし、
ウェブアプリの読み込み時に、それぞれのインスタンスが作成されます。また、このモジュールでは
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
scene.js
ファイルはウェブアプリのシーンを作成します。以下は、
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; });
タッチ操作のサポート
Interactive Canvas アクションは、ユーザーのタップ操作にも応答できます。 生成します。Interactive Canvas の設計ガイドラインに沿って、 アクションを「音声第一」に開発する必要があります。とはいえ、 ディスプレイはタップ操作をサポートしています。
サポート タッチは、会話形式の応答のサポートに似ています。ただし、 ユーザーの音声による応答ではなく、クライアント側の JavaScript が ウェブアプリの要素を変更する際に使用します。
こちらの例では、 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; });
トラブルシューティング
一方、Actions Console のシミュレータを使用して、 キャンバス アクションを使用すると、開発中に発生したエラーも ユーザー インターフェース上の Interactive Canvas ウェブアプリにおすすめしますこれらの情報は エラーも確認できます。
これらのエラー メッセージを Google Cloud プラットフォームのログで次の操作を行います。
- Actions Console で Actions プロジェクトを開きます。
- 上部のナビゲーションで [Test](テスト)をクリックします。
- [View logs in Google Cloud Platform] リンクをクリックします。
ユーザーのログインエラーによるデバイスはログビューアに時系列で表示されます。
エラータイプ
Google Cloud Platform のログに表示されるウェブアプリのエラーには、次の 3 種類があります。
- 10 秒以内に
ready
が呼び出されない場合に発生するタイムアウト onUpdate()
によって返された Promise が満たされなかった場合に発生するタイムアウト 10 秒以内- ウェブアプリで検出されない JavaScript ランタイム エラー
JavaScript エラーの詳細を表示
ウェブアプリ内の JavaScript ランタイム エラーの詳細が 使用できます。JavaScript ランタイム エラーの詳細を確認するには、 手順は次のとおりです。
- 適切なクロスオリジン リソース シェアリングが構成されていることを確認する (CORS)HTTP レスポンス ヘッダー。詳しくは クロスオリジン リソース シェアリングをご覧ください。
- インポートした
<script>
タグにcrossorigin="anonymous"
を HTML ファイル。次のコード スニペットのようになります。
<script crossorigin="anonymous" src="<SRC>"></script>
ガイドラインと制限事項
コンテンツを作成する際は、次のガイドラインと制限事項を考慮してください。 ウェブアプリをデプロイできます。
- Cookie は使用不可
- ローカル ストレージは使用不可
- 位置情報は使用不可
- カメラは使用不可
- 録音または録画は不可
- ポップアップは使用不可
- 200 MB のメモリ上限を超えないようにする
- コンテンツのレンダリング時にアクション名ヘッダーを考慮 画面上部)
- 動画へのスタイルの適用は不可
- 一度に使用できるメディア要素は 1 つのみ
- ウェブ SQL データベースは使用不可
- Web Speech API の
SpeechRecognition
インターフェースはサポートされていません。 - ダークモード設定を適用できません
- スマートディスプレイでの動画再生がサポートされています。このモジュールの サポートされているメディア コンテナの形式とコーデックについては、Google Nest Hub のコーデックをご覧ください。
クロスオリジン リソース シェアリング
Interactive Canvas のウェブアプリは iframe でホストされ、オリジンが設定されているため クロスオリジン リソース シェアリング(CORS)を有効にする必要があります。 ウェブサーバーとストレージ リソースを保護します。このプロセスにより null オリジンからのリクエストを受け入れます。
- メディアと画像が Firebase でホストされている場合は、以下をご覧ください。 カスタム ドメインのダイナミック リンクを作成して CORS を構成します。
- メディアと画像が Cloud Storage にある場合は、以下をご覧ください。 クロスオリジン リソース シェアリング(CORS)の構成 CORS を構成します
次のステップ
ウェブアプリに機能を追加するには、クライアントを使用して構築を続ける、または サーバーサイド フルフィルメント