Web uygulaması, Etkileşimli Tuval kullanan bir işlemin kullanıcı arayüzüdür. Mevcut web teknolojilerini (ör. HTML, CSS, JavaScript ve WebAssembly) web uygulamanızı tasarlamak ve geliştirmek için. Çoğunlukla, Etkileşimli Tuval, web içeriğini tarayıcı gibi oluşturabilir, ancak birkaç kısıtlama vardır Kullanıcı gizliliği ve güvenliği için zorunlu kılınır. Kullanıcı arayüzünüzü tasarlamaya başlamadan önce Tasarım yönergelerinde özetlenen tasarım ilkelerini göz önünde bulundurun. Firebase barındırma kullanmanızı öneririz web uygulamanızı dağıtın.
Web uygulamanızın HTML ve JavaScript'i şunları yapar:
- Etkileşimli Tuval JavaScript kitaplığını başlatın.
- Etkileşimli Tuval etkinlik geri çağırmaları kaydedin.
- Web uygulamanızı duruma göre güncellemek için özel mantık sağlayın.
Bu sayfada, web uygulamanızı geliştirmeniz için önerilen yöntemler, Conversational Action ile web uygulamanız arasındaki iletişimi ve genel yönergeler emin olmanız gerekir.
Önerilen kitaplıklar
Kullanıcı arayüzünü geliştirmek için istediğiniz yöntemi kullanabilirsiniz ancak Google, şu kitaplıklar:
- Greensock: Karmaşık animasyonlar oluşturmak için kullanılır.
- Pixi.js: WebGL'de 2D grafikler çizmek için.
- Three.js: WebGL'de 3D grafikler çizmek için.
- HTML5 Tuval çizimi: Basit çizimler için.
Mimari
Google, tek sayfalık uygulama mimarisi kullanmanızı önemle tavsiye eder. Bu yaklaşım, optimum performansa olanak tanır ve sürekli konuşmayı destekler. en iyi uygulamaları paylaşacağız. Etkileşimli Tuval, kullanıcı arabirimi ile birlikte kullanılabilir Vue, Angular ve React gibi çerçeveler yardımcı olan araçlar sunar.
HTML dosyası
HTML dosyası, kullanıcı arayüzünüzün nasıl göründüğünü tanımlar. Bu dosya ayrıca, Web uygulamanız arasında iletişim kurulmasını sağlayan Canvas API'si ve Konuşma İşleminiz.
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>
Conversational Action ve web uygulaması arasında iletişim kurma
Web uygulamanızı ve Conversational Action'ı derleyip Etkileşimli Tuval kitaplığını web uygulaması dosyanıza eklemek için, web uygulamanızın ve Conversational Action etkileşiminin. Bunu yapmak için web uygulamanızı içeren dosyaları değiştirin mantığıyla başlayalım.
action.js
Bu dosya, geri çağırmaları tanımlamak ve
yöntemlerden interactiveCanvas
tarihine kadar geçerli olur. Geri çağırma işlevleri, web
Uygulamada Sohbet İşlemi'nden gelen bilgilere veya isteklere yanıt verirken,
Conversational Action'a bilgi veya istek göndermenin bir yolunu sağlamalıdır.
Başlatmak ve başlatmak için interactiveCanvas.ready(callbacks);
öğesini HTML dosyanıza ekleyin
geri çağırma kaydedin:
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 modülü, action.js
ve scene.js
dosyalarını ve
web uygulaması yüklendiğinde her birinin örneklerini oluşturur. Bu modülde ayrıca
Etkileşimli Tuval için geri çağırmalar kaydeder.
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
dosyası, web uygulamanızın sahnesini oluşturur. Bu,
scene.js
kaynağından alıntı:
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; });
Dokunma etkileşimlerini destekleyin
Etkileşimli Tuval İşleminiz kullanıcınızın dokunuşuna yanıt verebilir ve her zaman fayda sağlar. Etkileşimli Tuval tasarım yönergelerine göre, İşleminizi "ses öncelikli" olacak şekilde geliştirmelisiniz. Bununla birlikte, destek dokunma etkileşimlerini görüntüler.
Destekleyici dokunma, diyaloglara verilen yanıtları desteklemeye benzer; ancak, kullanıcının sesli yanıtı yerine istemci taraflı JavaScript'iniz kullanır ve bunları web uygulamasındaki öğeleri değiştirmek için kullanır.
Bu örnekte, Pixi.js kitaplığı:
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; });
Sorun giderme
Simülatör olarak Eylemler konsolundaki simülatörü kullanarak etkileşimli Canvas İşlemi sırasında gerçekleştirdiğiniz işlemler sırasında, Kullanıcıların üzerinde etkileşimli Tuval web uygulaması üretim aşamasındaki cihazlar. Bunları görüntüleyebilirsiniz hataları gösterir.
Bu hata mesajlarını Google Cloud hesabınızda görmek için: Platform günlükleri için şu adımları uygulayın:
- Actions Console'da Actions projenizi açın.
- Üst gezinme menüsünde Test et'i tıklayın.
- Google Cloud Platform'da günlükleri görüntüle bağlantısını tıklayın.
Kullanıcılarınızın hataları cihazlar kronolojik sırada görünür.
Hata türleri
Google Cloud Platform günlüklerinde görebileceğiniz üç tür web uygulaması hatası vardır:
ready
10 saniye içinde çağrılmadığında meydana gelen zaman aşımlarıonUpdate()
tarafından döndürülen söz yerine getirilmediğinde oluşan zaman aşımları 10 saniye içinde- Web uygulamanızda yakalanmayan JavaScript çalışma zamanı hataları
JavaScript hatası ayrıntılarını göster
Web uygulamanızdaki JavaScript çalışma zamanı hatalarının ayrıntıları varsayılan olarak kullanılabilir. JavaScript çalışma zamanı hatalarının ayrıntılarını görmek için aşağıdakini şu adımları uygulayın:
- Kaynaklar arası uygun kaynak paylaşımını yapılandırdığınızdan emin olun (CORS) Web uygulaması dosyalarınızdaki HTTP yanıtı üstbilgileri. Daha fazla bilgi için Kaynaklar arası kaynak paylaşımı adlı makaleyi inceleyin.
crossorigin="anonymous"
öğesini<script>
HTML dosyası; aşağıdaki kod snippet'inde gösterildiği gibi:
<script crossorigin="anonymous" src="<SRC>"></script>
Kurallar ve kısıtlamalar
Uygulama geliştirirken aşağıdaki yönergeleri ve kısıtlamaları dikkate alın web uygulamanız:
- Çerez yok
- Yerel depolama alanı yok
- Coğrafi konum yok
- Kamera kullanımı yok
- Ses veya video kaydı yok
- Pop-up yok
- 200 MB bellek sınırının altında kalın
- İçerik oluştururken İşlem adı başlığını dikkate alın ( ekranın üst kısmında)
- Videolara stil uygulanamaz
- Aynı anda yalnızca bir medya öğesi kullanılabilir
- Web SQL veritabanı yok
- Web Speech API'nin
SpeechRecognition
arayüzü desteklenmez. - Koyu mod ayarı geçerli değil
- Video oynatma özelliği akıllı ekranlarda desteklenir. Daha fazla bilgi için desteklenen medya kapsayıcı biçimleri ve codec'leri için Google Nest Hub codec'lerine bakın.
Kaynaklar arası kaynak paylaşımı
Etkileşimli Tuval web uygulamaları iFrame içinde barındırıldığı ve kaynak ayarlandığı için null değerine ayarlamak için kaynaklar arası kaynak paylaşımını (CORS) etkinleştirmeniz gerekir. depolama kaynaklarınız için de geçerlidir. Bu süreç, öğelerinizin boş kaynaklardan gelen istekleri kabul et.
- Medya ve resimleriniz Firebase ile barındırılıyorsa CORS'yi yapılandırmak için özel alan dinamik bağlantıları oluşturun.
- Medyanız ve görüntüleriniz Cloud Storage'da bulunuyorsa bkz. Kaynaklar arası kaynak paylaşımını (CORS) yapılandırma kullanarak CORS'yi yapılandırabilirsiniz.
Sonraki adımlar
Web uygulamanıza daha fazla özellik eklemek için bkz. İstemciyle veya sunucu tarafı yerine getirmesi.