Bagikan melalui


Penyedia widget web

Dalam rilis terbaru, aplikasi yang mengimplementasikan widget Windows dapat memilih untuk mengisi konten widget dengan HTML yang disajikan dari URL jarak jauh. Sebelumnya, konten widget hanya dapat disediakan dalam format skema Kartu Adaptif dalam payload JSON yang diteruskan dari penyedia ke Papan Widget. Karena penyedia widget web masih harus menyediakan payload JSON Kartu Adaptif, Anda harus mengikuti langkah-langkah untuk menerapkan penyedia widget di Menerapkan penyedia widget di Aplikasi C# Windows atau Menerapkan penyedia widget di aplikasi win32 (C++/WinRT).

Tentukan URL konten

Penyedia widget meneruskan payload JSON ke Widgets Board dengan panggilan ke WidgetManager.UpdateWidget. Untuk widget web, alih-alih menyediakan objek isi yang menentukan konten widget, Anda harus menentukan objek isi kosong dan sebaliknya menyertakan objek metadata dengan bidang webUrl yang menunjuk ke URL yang akan menyediakan konten HTML untuk widget.

{ 
    "type": "AdaptiveCard", 
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", 
    "version": "1.6", 
    "body": [], 
    "metadata": 
    { 
        "webUrl": "https://www.contoso.com/widgetprovider.html" 
    } 
} 

Menangani permintaan sumber daya

Penyedia widget dapat menentukan string filter permintaan web untuk widget di atribut WebRequestFilter dari elemen Definisi dalam file manifes paket penyedia. Setiap kali konten widget meminta sumber daya oleh URI yang cocok dengan filter, permintaan akan dicegat dan dialihkan ke implementasi penyedia widget IWidgetResourceProvider.OnResourceRequested.

Pola filter dinyatakan menggunakan format yang dijelaskan dalam Pola Pencocokan. String filter dalam pendaftaran harus menggunakan Punycode jika perlu. Semua jenis konten akan dialihkan ketika ditemukan kecocokan, oleh karena itu, filter hanya boleh menargetkan konten yang dimaksudkan untuk diperoleh melalui IWidgetResourceProvider dalam aplikasi. Untuk informasi selengkapnya tentang format manifes paket penyedia widget, lihat Format XML manifes paket penyedia widget.

Untuk menangani permintaan sumber daya, penyedia widget harus menerapkan antarmuka IWidgetResourceProvider .

internal class WidgetProvider : IWidgetProvider, IWidgetResourceProvider

Dalam implementasi metode OnResourceRequested , penyedia widget dapat menyediakan sumber daya yang diminta dengan mengatur properti WidgetResourceRequestedArgs.Response ke objek WidgetResourceResponse yang berisi sumber daya yang diminta. Saat mendapatkan sumber daya secara asinkron, penyedia harus meminta penangguhan dengan memanggil WidgetResourceRequestedArgs.GetDeferral dan kemudian menyelesaikan deferral ketika sumber daya telah ditetapkan.

async void IWidgetResourceProvider.OnResourceRequested(WidgetResourceRequestedArgs args)
{
    var deferral = args.GetDeferral();

    if (args.Request.Uri.Length > 0)
    {
        if (args.Request.Uri == "https://contoso.com/logo-image")
        {
            string fullPath = Windows.ApplicationModel.Package.Current.InstalledPath + "/Assets/image.png";
            var file = await StorageFile.GetFileFromPathAsync(fullPath);
            var response = new WidgetResourceResponse(RandomAccessStreamReference.CreateFromFile(file), "OK", 200);
            response.Headers.Add("Content-Type", "image/png");
            args.Response = response;
        }
    }

    deferral.Complete();
}

Jika penyedia tidak mengatur respons pada objek WidgetResourceRequestedArgs yang diteruskan ke metode , sistem akan mengambil sumber daya dari web. Dalam hal ini, penyedia dapat memilih untuk memodifikasi properti Header dari objek WidgetResourceRequestedArgs.Request , seperti untuk menyediakan konteks atau token pengguna, dan sistem akan menggunakan header yang diperbarui saat mengambil sumber daya dari web.

Menangani pesan ke dan dari konten web

Untuk menerima pesan string dari konten widget yang telah diposting menggunakan metode JavaScript window.chrome.webview.postMessage , penyedia widget dapat mengimplementasikan antarmuka IWidgetProviderMessage dan menerapkan metode OnMessageReceived .

internal class WidgetProvider : IWidgetProvider, IWidgetProviderMessage
...
public void OnMessageReceived(WidgetMessageReceivedArgs args)
{
    Console.WriteLine($"Message received from widget {args.WidgetContext.Id}: {args.Message}");
}

Penyedia widget dapat mengirim pesan ke konten web widget dengan memanggil WidgetManager.SendMessage. Anda harus memberikan ID widget tempat pesan dikirim, yang merupakan nilai yang ditentukan dalam atribut Id elemen Definisi dalam file manifes paket penyedia. Untuk informasi selengkapnya, lihat Format XML manifes paket penyedia widget. String pesan dapat berupa teks sederhana atau bentuk objek yang diserialisasikan yang ditafsirkan oleh konten web. Untuk informasi selengkapnya, lihat PostWebMessageAsString.

var message = $"{{ \"current_location\": \"{ location }\" }}";
WidgetManager.GetDefault().SendMessageToContent("Weather_Widget", message);

Batasan dan persyaratan

  • Fitur ini hanya tersedia untuk pengguna di European Economic Area (EEA). Di EEA, aplikasi yang diinstal yang mengimplementasikan penyedia umpan dapat menyediakan umpan konten di Papan Widget.