Web widget-szolgáltatók

Az Windows widgeteket implementáló alkalmazások dönthetnek úgy, hogy a widget tartalmát egy távoli URL-címről letöltött HTML-lel töltik fel. Korábban a widget tartalmát csak adaptív kártya sémaformátumban lehetett megadni a szolgáltatótól a Widgets Boardnak átadott JSON hasznos adatban. Mivel a web widget szolgáltatóknak továbbra is rendelkezniük kell egy adaptív kártya JSON payloaddal, kövesse a widget szolgáltató implementálásának lépéseit a Widget szolgáltató implementálása C# Windows-alkalmazás-ban vagy Widget szolgáltató implementálása win32 alkalmazásban (C++/WinRT).

A tartalom URL-címének megadása

A widget-szolgáltatók JSON-hasznos adatokat adnak át a Widget Board számára a WidgetManager.UpdateWidget hívással. Webes widget esetén a widget tartalmát meghatározó törzsobjektum helyett adjon meg egy üres törzsobjektumot, és helyette egy webUrl-mezővel rendelkező metaadat-objektumot adjon meg, amely a widget HTML-tartalmát tartalmazó URL-címre mutat.

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

Erőforrás-kérelmek kezelése

A widget-szolgáltatók a szolgáltató csomagjegyzékfájljának Definíció elemének WebRequestFilter attribútumában megadhatnak egy webes kérés szűrősztringet egy widgethez. Amikor a widget tartalma olyan erőforrást kér URI alapján, amely megfelel a szűrőnek, a kérést elfogják és átirányítják a widget szolgáltatójának IWidgetResourceProvider.OnResourceRequested implementációjára.

A szűrőminta a Match Patterns (Egyeztetési minták) szakaszban leírt formátummal van kifejezve. A regisztráció szűrősztringjének szükség esetén a Punycode-ot kell használnia. A rendszer minden tartalomtípust átirányít, ha egyezést talál, ezért a szűrőnek csak olyan tartalomra kell vonatkoznia, amelyet az alkalmazás IWidgetResourceProvider-én keresztül kívánnak beszerezni. A widget-szolgáltatói csomag jegyzékformátumával kapcsolatos további információkért tekintse meg a widget-szolgáltató csomagjegyzékének XML-formátumát.

Az erőforrás-kérelmek kezeléséhez a vezérlőszolgáltatóknak implementálniuk kell az IWidgetResourceProvider felületet.

internal class WidgetProvider : IWidgetProvider, IWidgetResourceProvider

Az OnResourceRequested metódus implementációjában a widgetszolgáltatók a kért erőforrásokat úgy biztosíthatják, hogy a WidgetResourceRequestedArgs.Response tulajdonságot egy WidgetResourceResponse objektumra állítja, amely tartalmazza a kért erőforrást. Az erőforrás aszinkron beszerzésekor a szolgáltatónak halasztást kell kérnie a WidgetResourceRequestedArgs.GetDeferral meghívásával, majd az erőforrás beállításakor fejezze be a halasztást.

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();
}

Ha a szolgáltató nem állít be választ a metódusnak átadott WidgetResourceRequestedArgs objektumra, a rendszer lekéri az erőforrást a weből. Ebben az esetben a szolgáltató módosíthatja a WidgetResourceRequestedArgs.Request objektum Fejlécek tulajdonságát, például felhasználói környezet vagy jogkivonatok megadását, és a rendszer a frissített fejléceket fogja használni az erőforrás webes lekérésekor.

Webes tartalmakba érkező és onnan érkező üzenetek kezelése

Ha sztringüzeneteket szeretne fogadni a widget tartalmából, amelyet a window.chrome.webview.postMessage JavaScript metódussal tettek közzé, a widget-szolgáltatók implementálhatják az IWidgetProviderMessage felületet, és implementálhatják az OnMessageReceived metódust .

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

A widgetszolgáltatók a WidgetManager.SendMessage meghívásával üzenetet küldhetnek a widget webes tartalmába. Meg kell adnia annak a widgetnek az azonosítóját, amelyre az üzenetet küldi, amely a szolgáltató csomagjegyzékfájljának Definíció elemének Azonosító attribútumában megadott érték. További információ: Widget-szolgáltatói csomagjegyzék XML-formátuma. Az üzenetsztring lehet egyszerű szöveg vagy a webes tartalom által értelmezett objektum szerializált formája. További információ: PostWebMessageAsString.

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

Korlátozások és követelmények

Important

Ez a funkció csak az Európai Gazdasági Térség (EGT) felhasználói számára érhető el. Az EGT-ben a hírcsatorna-szolgáltatót megvalósító telepített alkalmazások tartalomcsatornát biztosíthatnak a Widgets Boardban.