Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto článku se dozvíte, jak vytvořit rozšíření aplikace pro Windows 10 a hostovat ho v aplikaci. Rozšíření aplikací jsou podporována v aplikacích pro UPW a zabalených desktopových aplikací.
Abychom si ukázali, jak vytvořit rozšíření aplikace, tento článek používá kód XML manifestu balíčku a fragmenty kódu z ukázky kódu rozšíření pro matematiku. Tato ukázka je aplikace pro UPW, ale funkce demonstrované v ukázce platí také pro zabalené desktopové aplikace. Pokud chcete začít s ukázkou, postupujte podle těchto pokynů:
- Stáhněte a rozbalte ukázku kódu matematického rozšíření.
- V sadě Visual Studio 2019 otevřete MathExtensionSample.sln. Nastavte typ sestavení na x86 (Build>Configuration Manager a pak změňte platformu na x86 pro oba projekty).
- Nasazení řešení: Sestavit>Nasadit řešení.
Úvod do rozšíření aplikací
Rozšíření aplikací ve Windows 10 poskytují funkce podobné plug-inům, rozšířením a doplňkům na jiných platformách. Rozšíření aplikací byla zavedena v edici Windows 10 Anniversary (verze 1607, build 10.0.14393).
Rozšíření aplikací jsou aplikace pro UPW nebo zabalené desktopové aplikace, které mají deklaraci rozšíření, která jim umožňuje sdílet obsah a události nasazení s hostitelskou aplikací. Aplikace rozšíření může poskytovat více rozšíření.
Vzhledem k tomu, že rozšíření aplikací jsou jenom aplikace pro UPW nebo zabalené desktopové aplikace, můžou být také plně funkčními aplikacemi, rozšířeními hostitele a poskytovat rozšíření ostatním aplikacím – to vše bez nutnosti vytvářet samostatné balíčky aplikací.
Když vytvoříte hostitele rozšíření aplikace, vytvoříte příležitost k vývoji ekosystému kolem vaší aplikace, ve kterém můžou ostatní vývojáři aplikaci vylepšit způsoby, pro které jste možná neočekávali nebo měli prostředky. Zvažte rozšíření Microsoft Office, rozšíření sady Visual Studio, rozšíření prohlížeče atd. Tyto aplikace vytvářejí bohatší prostředí pro aplikace, které překračují možnosti funkcí, se kterými jsou dodávány. Rozšíření můžou do vaší aplikace přidat hodnotu a dlouhou životnost.
Pokud chcete nastavit vztah rozšíření aplikace, musíme na vysoké úrovni:
- Deklarujte aplikaci jako hostitele rozšíření.
- Deklarujte aplikaci jako rozšíření.
- Rozhodněte se, jestli chcete rozšíření implementovat jako službu App Service, úlohu na pozadí nebo jiným způsobem.
- Definujte, jak budou hostitelé a jeho rozšíření komunikovat.
- Pro přístup k rozšířením použijte rozhraní API pro Windows.ApplicationModel.AppExtensions v hostitelské aplikaci.
Pojďme se podívat, jak se to dělá prozkoumáním ukázky kódu rozšíření pro matematiku , která implementuje hypotetickou kalkulačku, do které můžete přidat nové funkce pomocí rozšíření. V sadě Microsoft Visual Studio 2019 načtěte MathExtensionSample.sln z ukázkového kódu.
Deklarace aplikace jako hostitele rozšíření
Aplikace se identifikuje jako hostitel rozšíření aplikace deklarací elementu <AppExtensionHost> v souboru Package.appxmanifest. V projektu MathExtensionHost se podívejte na soubor Package.appxmanifest a zjistěte, jak se to dělá.
Soubor package.appxmanifest v projektu MathExtensionHost
<Package
...
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
IgnorableNamespaces="uap uap3 mp">
...
<Applications>
<Application Id="App" ... >
...
<Extensions>
<uap3:Extension Category="windows.appExtensionHost">
<uap3:AppExtensionHost>
<uap3:Name>com.microsoft.mathext</uap3:Name>
</uap3:AppExtensionHost>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
...
</Package>
Všimněte si xmlns:uap3="http://..." a přítomnosti uap3 v IgnorableNamespaces. Toto je nezbytné, protože používáme obor názvů uap3.
<uap3:Extension Category="windows.appExtensionHost"> identifikuje tuto aplikaci jako hostitele rozšíření.
Element Name v <uap3:AppExtensionHost> je název kontraktu rozšíření . Pokud rozšíření určuje stejný název kontraktu rozšíření, hostitel ho bude moct najít. Podle konvence doporučujeme vytvořit název kontraktu rozšíření pomocí názvu aplikace nebo vydavatele, aby nedocházelo k potenciálním kolizím s jinými názvy kontraktů rozšíření.
Ve stejné aplikaci můžete definovat více hostitelů a více rozšíření. V tomto příkladu deklarujeme jednoho hostitele. Rozšíření je definované v jiné aplikaci.
Deklarace aplikace jako rozšíření
Aplikace se identifikuje jako rozšíření aplikace deklarací elementu <uap3:AppExtension> v souboru Package.appxmanifest . Otevřete soubor Package.appxmanifest v projektu MathExtension a podívejte se, jak se to dělá.
Package.appxmanifest v rámci projektu MathExtension:
<Package
...
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
IgnorableNamespaces="uap uap3 mp">
...
<Applications>
<Application Id="App" ... >
...
<Extensions>
...
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.microsoft.mathext"
Id="power"
DisplayName="x^y"
Description="Exponent"
PublicFolder="Public">
<uap3:Properties>
<Service>com.microsoft.powservice</Service>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
</Application>
</Applications>
...
</Package>
Opět si všimněte linie xmlns:uap3="http://..." a přítomnosti uap3 v IgnorableNamespaces. Tyto jsou nezbytné, protože používáme uap3 obor názvů.
<uap3:Extension Category="windows.appExtension"> identifikuje tuto aplikaci jako rozšíření.
<uap3:AppExtension> Význam atributů je následující:
| Vlastnost | Popis | Povinné |
|---|---|---|
| název | Toto je název kontraktu rozšíření. Pokud se shoduje s Name deklarovaným v hostiteli, hostitel bude moct toto rozšíření najít. | ✔️ |
| ID | Jednoznačně identifikuje toto rozšíření. Vzhledem k tomu, že může existovat více rozšíření, která používají stejný název kontraktu rozšíření (představte si aplikaci malování, která podporuje několik rozšíření), můžete id použít k jejich oddělování. Hostitelé rozšíření aplikací můžou pomocí ID odvodit něco o typu rozšíření. Například můžete mít jedno rozšíření určené pro stolní počítače a jiné pro mobilní zařízení, přičemž jejich ID je to, co je odlišuje. K tomu můžete použít také element Properties , který je popsán níže. | ✔️ |
| ZobrazovanýNázev | Můžete ho použít z hostitelské aplikace k identifikaci rozšíření pro uživatele. Je možné ji dotazovat a může použít nový systém správy prostředků (ms-resource:TokenName) pro lokalizaci. Lokalizovaný obsah se načte z balíčku rozšíření aplikace, nikoli z hostitelské aplikace. |
|
| Popis | Můžete ho použít z hostitelské aplikace k popisu rozšíření pro uživatele. Je možné ji dotazovat a může použít nový systém správy prostředků (ms-resource:TokenName) pro lokalizaci. Lokalizovaný obsah se načte z balíčku rozšíření aplikace, nikoli z hostitelské aplikace. |
|
| PublicFolder | Název složky vzhledem ke kořenovému adresáři balíčku, kde můžete sdílet obsah s hostitelem rozšíření. Podle konvence je název "Veřejný", ale můžete použít libovolný název, který odpovídá složce ve vašem rozšíření. | ✔️ |
<uap3:Properties> je volitelný prvek, který obsahuje vlastní metadata, která hostitelé mohou číst za běhu. V ukázce kódu je rozšíření implementováno jako služba aplikace (app service), takže hostitel potřebuje způsob, jak získat název této služby aplikace, aby ji mohl volat. Název služby App Service je definovaný v elementu <Service> , který jsme definovali (mohli jsme ho pojmenovat cokoli, co jsme chtěli). Hostitel v ukázce kódu hledá tuto vlastnost za běhu, aby se dozvěděl název služby App Service.
Rozhodněte se, jak rozšíření implementujete.
Relace buildu 2016 o rozšířeních aplikací ukazuje, jak používat veřejnou složku sdílenou mezi hostitelem a rozšířeními. V tomto příkladu je rozšíření implementováno javascriptovým souborem uloženým ve veřejné složce, kterou hostitel vyvolá. Tento přístup má výhodu, že je jednoduchý, nevyžaduje kompilaci a může podporovat vytvoření výchozí cílové stránky, která poskytuje pokyny pro rozšíření a odkaz na stránku Microsoft Storu hostitelské aplikace. V ukázce kódu rozšíření aplikace Build 2016 najdete podrobnosti. Konkrétně se podívejte na projekt InvertImageExtension a InvokeLoad() v ExtensionManager.cs v projektu ExtensibilitySample .
V tomto příkladu použijeme službu App Service k implementaci rozšíření. Služby App Services mají následující výhody:
- Pokud dojde k pádu rozšíření, hostitelská aplikace zůstane neovlivněna, protože běží ve vlastním procesu.
- K implementaci služby můžete použít jazyk podle svého výběru. Nemusí odpovídat jazyku použitému k implementaci hostitelské aplikace.
- Služba App Service má přístup k vlastnímu kontejneru aplikací– což může mít jiné možnosti, než má hostitel.
- Mezi daty ve službě a hostitelskou aplikací existuje izolace.
Kód hostované aplikační služby
Tady je kód hostitele, který vyvolá aplikační službu rozšíření:
ExtensionManager.cs v projektu MathExtensionHost
public async Task<double> Invoke(ValueSet message)
{
if (Loaded)
{
try
{
// make the app service call
using (var connection = new AppServiceConnection())
{
// service name is defined in appxmanifest properties
connection.AppServiceName = _serviceName;
// package Family Name is provided by the extension
connection.PackageFamilyName = AppExtension.Package.Id.FamilyName;
// open the app service connection
AppServiceConnectionStatus status = await connection.OpenAsync();
if (status != AppServiceConnectionStatus.Success)
{
Debug.WriteLine("Failed App Service Connection");
}
else
{
// Call the app service
AppServiceResponse response = await connection.SendMessageAsync(message);
if (response.Status == AppServiceResponseStatus.Success)
{
ValueSet answer = response.Message as ValueSet;
if (answer.ContainsKey("Result")) // When our app service returns "Result", it means it succeeded
{
return (double)answer["Result"];
}
}
}
}
}
catch (Exception)
{
Debug.WriteLine("Calling the App Service failed");
}
}
return double.NaN; // indicates an error from the app service
}
Toto je typický kód pro vyvolání služby App Service. Podrobnosti o tom, jak implementovat a volat službu App Service, najdete v tématu Vytvoření a využití služby App Service.
Je potřeba si uvědomit, jak se určuje název aplikace služby, kterou chcete volat. Vzhledem k tomu, že hostitel nemá informace o implementaci rozšíření, musí toto rozšíření zadat název služby App Service. V ukázce kódu rozšíření deklaruje název App Service ve svém souboru v elementu <uap3:Properties>:
Package.appxmanifest v projektu MathExtension
...
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension ...>
<uap3:Properties>
<Service>com.microsoft.powservice</Service>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
V elementu <uap3:Properties> můžete definovat vlastní XML. V tomto případě definujeme název služby aplikace, aby jej hostitel mohl použít při využití rozšíření.
Když hostitel načte rozšíření, kód podobný tomuto extrahuje název služby z vlastností definovaných v souboru Package.appxmanifest rozšíření:
Update() v souboru ExtensionManager.cs v projektu MathExtensionHost
...
var properties = await ext.GetExtensionPropertiesAsync() as PropertySet;
...
#region Update Properties
// update app service information
_serviceName = null;
if (_properties != null)
{
if (_properties.ContainsKey("Service"))
{
PropertySet serviceProperty = _properties["Service"] as PropertySet;
this._serviceName = serviceProperty["#text"].ToString();
}
}
#endregion
S uloženým názvem služby App Service ve _serviceName může hostitel použít službu k vyvolání.
Volání služby App Service také vyžaduje název rodiny balíčku, který obsahuje službu App Service. Rozhraní API rozšíření aplikace naštěstí poskytuje tyto informace získané na řádku: connection.PackageFamilyName = AppExtension.Package.Id.FamilyName;
Definování způsobu komunikace hostitele a rozšíření
Služby App používají ValueSet k výměně informací. Jako autor hostitele musíte vymyslet flexibilní protokol pro komunikaci s rozšířeními. V ukázce kódu to znamená zohlednění rozšíření, která mohou v budoucnu přijímat 1, 2 nebo více argumentů.
V tomto příkladu je protokol argumentů ValueSet obsahující páry klíč-hodnota s názvem "Arg" + číslo argumentu, například Arg1 a Arg2. Hostitel předá všechny argumenty v sadě ValueSet a rozšíření využívá ty, které potřebuje. Pokud rozšíření dokáže vypočítat výsledek, pak hostitel očekává, že ValueSet vrácená z rozšíření bude mít klíč s názvem Result, který obsahuje hodnotu výpočtu. Pokud tento klíč není k dispozici, hostitel předpokládá, že rozšíření nemohlo dokončit výpočet.
Kód rozšíření služby App Service
V ukázce kódu není aplikační služba rozšíření implementována jako úloha na pozadí. Místo toho používá jediný model služby 'proc app service', ve kterém služba aplikace běží ve stejném procesu jako aplikace rozšíření, která ji hostuje. Jedná se o jiný proces než hostitelská aplikace, který poskytuje výhody oddělení procesů a současně získává určité výhody výkonu tím, že se vyhnete komunikaci mezi procesem rozšíření a procesem na pozadí, který implementuje službu App Service. Viz Převod služby App Service tak, aby běžela ve stejném procesu jako hostitelská aplikace , abyste viděli rozdíl mezi službou App Service, která běží jako úloha na pozadí a ve stejném procesu.
Systém se přepne na OnBackgroundActivate(), jakmile je aktivována služba App Service. Tento kód nastaví obslužné rutiny událostí tak, aby zpracovávaly volání služby, když je k dispozici (OnAppServiceRequestReceived()), a také řeší úklidové události, jako je například získání odloženého objektu pro zpracování zrušení nebo uzavření události.
App.xaml.cs v projektu MathExtension.
protected override void OnBackgroundActivated(BackgroundActivatedEventArgs args)
{
base.OnBackgroundActivated(args);
if ( _appServiceInitialized == false ) // Only need to setup the handlers once
{
_appServiceInitialized = true;
IBackgroundTaskInstance taskInstance = args.TaskInstance;
taskInstance.Canceled += OnAppServicesCanceled;
AppServiceTriggerDetails appService = taskInstance.TriggerDetails as AppServiceTriggerDetails;
_appServiceDeferral = taskInstance.GetDeferral();
_appServiceConnection = appService.AppServiceConnection;
_appServiceConnection.RequestReceived += OnAppServiceRequestReceived;
_appServiceConnection.ServiceClosed += AppServiceConnection_ServiceClosed;
}
}
Kód, který vykonává funkci rozšíření, je v OnAppServiceRequestReceived(). Tato funkce se volá při vyvolání služby App Service k provedení výpočtu. Extrahuje hodnoty, které potřebuje, z ValueSet. Pokud může provést výpočet, vloží výsledek pod klíč s názvem Výsledekdo ValueSet, který je vrácen hostiteli. Podle protokolu definujícího, jak bude tento hostitel a jeho rozšíření komunikovat, znamená přítomnost klíče Result úspěch; v opačném případě selhání.
App.xaml.cs v projektu MathExtension.
private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
// Get a deferral because we use an awaitable API below (SendResponseAsync()) to respond to the message
// and we don't want this call to get cancelled while we are waiting.
AppServiceDeferral messageDeferral = args.GetDeferral();
ValueSet message = args.Request.Message;
ValueSet returnMessage = new ValueSet();
double? arg1 = Convert.ToDouble(message["arg1"]);
double? arg2 = Convert.ToDouble(message["arg2"]);
if (arg1.HasValue && arg2.HasValue)
{
returnMessage.Add("Result", Math.Pow(arg1.Value, arg2.Value)); // For this sample, the presence of a "Result" key will mean the call succeeded
}
await args.Request.SendResponseAsync(returnMessage);
messageDeferral.Complete();
}
Správa rozšíření
Teď, když jsme viděli, jak implementovat vztah mezi hostitelem a jeho rozšířením, pojďme se podívat, jak hostitel najde rozšíření nainstalovaná v systému a reaguje na přidání a odebrání balíčků obsahujících rozšíření.
Microsoft Store poskytuje rozšíření jako balíčky. AppExtensionCatalog najde nainstalované balíčky, které obsahují rozšíření odpovídající názvu kontraktu rozšíření hostitele, a dodává události, které se aktivují, když je nainstalován nebo odebrán balíček rozšíření aplikace relevantní pro hostitele.
V ukázce kódu třída ExtensionManager (definovaná v ExtensionManager.cs v projektu MathExtensionHost) obsahuje logiku pro načítání rozšíření a reaguje na instalaci a odinstalaci balíčku rozšíření.
Konstruktor ExtensionManager používá AppExtensionCatalog k vyhledání rozšíření aplikace v systému, které mají stejný název kontraktu rozšíření jako hostitel:
ExtensionManager.cs v projektu MathExtensionHost.
public ExtensionManager(string extensionContractName)
{
// catalog & contract
ExtensionContractName = extensionContractName;
_catalog = AppExtensionCatalog.Open(ExtensionContractName);
...
}
Při instalaci balíčku rozšíření ExtensionManager shromáždí informace o rozšířeních, která mají stejný název kontraktu rozšíření jako hostitel. Instalace může představovat aktualizaci v takovém případě, že se aktualizují informace o ovlivněném rozšíření. Při odinstalaci balíčku rozšíření odebere informace o ovlivněných rozšířeních, ExtensionManager aby uživatel věděl, která rozšíření už nejsou k dispozici.
Třída Extension (definovaná v ExtensionManager.cs v projektu MathExtensionHost ) byla vytvořena pro vzorový kód pro přístup k ID rozšíření, popisu, loga a informací o konkrétních aplikacích, jako je například to, jestli uživatel povolil rozšíření.
Říci, že se rozšíření načetlo (viz Load() v ExtensionManager.cs) znamená, že stav balíčku je dobrý a že jsme získali jeho ID, logo, popis a veřejnou složku (což v této ukázce nepoužíváme, je to jen k tomu, abychom ukázali, jak ho můžete získat). Samotný balíček rozšíření se nenačítá.
Koncept uvolňování se používá k udržování přehledu o tom, která rozšíření by již neměla být uživateli prezentována.
Tento ExtensionManager poskytuje kolekci instancí Extension, aby rozšíření, jejich názvy, popisy a loga mohly být svázány k uživatelskému rozhraní. Stránka ExtensionsTab vytvoří vazbu na tuto kolekci a poskytuje uživatelské rozhraní pro povolení nebo zakázání rozšíření a jejich odebrání.
Příklad uživatelského rozhraní na kartě rozšíření 
Když se rozšíření odebere, systém vyzve uživatele, aby ověřil, že chce odinstalovat balíček, který rozšíření obsahuje (a případně obsahuje další rozšíření). Pokud uživatel souhlasí, balíček se odinstaluje a ExtensionManager odebere rozšíření z odinstalovaného balíčku ze seznamu rozšíření dostupných pro hostitelskou aplikaci.
Ladění rozšíření a hostitelů aplikací
Hostitel rozšíření a rozšíření často nejsou součástí stejného řešení. V takovém případě pro ladění hostitele a rozšíření:
- Načtěte projekt hostitele v jedné instanci sady Visual Studio.
- Načtěte svoje rozšíření v jiné instanci sady Visual Studio.
- Spusťte hostitelskou aplikaci v debuggeru.
- Spusťte v ladicím programu aplikaci rozšíření. (Pokud chcete nasadit rozšíření, nikoli ho ladit, abyste mohli otestovat událost instalace balíčku hostitele, proveďte místo toho Sestavení > Nasadit řešení).
Teď budete moct narazit na zarážky v hostiteli a rozšíření. Pokud spustíte ladění samotné aplikace rozšíření, zobrazí se prázdné okno aplikace. Pokud nechcete zobrazit prázdné okno, můžete změnit nastavení ladění pro projekt rozšíření tak, aby aplikace nebyla spuštěna, ale místo toho byla laděna přímo při svém spuštění (klikněte pravým tlačítkem myši na projekt rozšíření, Vlastnosti>Ladění> vyberte Nespouštět, ale ladit můj kód při spuštění). Stále budete muset spustit ladění projektu rozšíření (F5), ale ladění počká, dokud hostitel rozšíření neaktivuje, a potom budou zasaženy vaše zarážky v rozšíření.
Odladit kód ukázky
V ukázce kódu se hostitel a rozšíření nacházejí ve stejném řešení. Ladění provedete následujícím postupem:
- Ujistěte se, že mathExtensionHost je spouštěný projekt (klikněte pravým tlačítkem myši na projekt MathExtensionHost a klikněte na nastavit jako spouštěný projekt).
- Nastavte zarážku na
Invokev ExtensionManager.cs v projektu MathExtensionHost. - F5 pro spuštění projektu MathExtensionHost.
- Umístěte zarážku na
OnAppServiceRequestReceivedv App.xaml.cs v projektu MathExtension. - Spusťte ladění projektu MathExtension (klikněte pravým tlačítkem myši na projekt MathExtension, Ladit > Spustit novou instanci), která ji nasadí a aktivuje událost instalace balíčku v hostiteli.
- V aplikaci MathExtensionHost přejděte na stránku Výpočet a kliknutím na x^y rozšíření aktivujte. Nejprve je dosažena zarážka
Invoke()a provádí se volání služby App Service rozšíření. Poté se spustí metodaOnAppServiceRequestReceived()v rozšíření a uvidíte, jak služba vypočítá výsledek a vrátí ho.
řešení potíží s rozšířeními implementovanými jako aplikační služba
Pokud má hostitel rozšíření potíže s připojením ke službě App Service pro vaše rozšíření, ujistěte se, že <uap:AppService Name="..."> atribut odpovídá tomu, co jste zadali do elementu <Service> . Pokud se neshodují, název služby, kterou vaše rozšíření poskytuje, nebude odpovídat názvu služby App Service, který jste implementovali, a hostitel nebude moct vaše rozšíření aktivovat.
Package.appxmanifest v rámci projektu MathExtension:
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="com.microsoft.sqrtservice" /> <!-- This must match the contents of <Service>...</Service> -->
</uap:Extension>
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension Name="com.microsoft.mathext" Id="sqrt" DisplayName="Sqrt(x)" Description="Square root" PublicFolder="Public">
<uap3:Properties>
<Service>com.microsoft.powservice</Service> <!-- this must match <uap:AppService Name=...> -->
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
</Extensions>
Kontrolní seznam základních scénářů pro testování
Když vytváříte hostitele rozšíření a jste připraveni otestovat, nakolik podporuje rozšíření, zde jsou některé jednoduché scénáře k vyzkoušení:
- Spusťte hostitele a pak nasaďte aplikaci rozšíření.
- Zachytí hostitel nová rozšíření, která se objeví, když je spuštěn?
- Nasaďte aplikaci rozšíření a poté nasaďte a spusťte hostitelskou aplikaci.
- Rozpozná hostitel existující rozšíření?
- Spusťte hostitele a pak odeberte aplikaci rozšíření.
- Zjistí hostitel odebrání správně?
- Spusťte hostitele a pak aktualizujte aplikaci rozšíření na novější verzi.
- Zaznamená hostitel změnu a správně odstraní staré verze rozšíření?
Pokročilé scénáře pro testování:
- Spusťte hostitele, přesuňte aplikaci rozšíření na vyměnitelné médium, odeberte médium.
- Zjistí hostitel změnu stavu balíčku a zakáže rozšíření?
- Spusťte hostitele a potom poškodte aplikaci rozšíření (udělat ji neplatnou, podepsat ji jinak atd.)
- Zjistí hostitel manipulované rozšíření a zpracuje ho správně?
- Spusťte hostitele a pak nasaďte aplikaci rozšíření s neplatným obsahem nebo vlastnostmi.
- Zjistí hostitel neplatný obsah a zpracuje ho správně?
Aspekty návrhu
- Zadejte uživatelské rozhraní, které zobrazuje uživatele, která rozšíření jsou k dispozici, a umožňuje jim je povolit nebo zakázat. Můžete také zvážit přidání glyfů pro rozšíření, která se stanou nedostupnými, protože balíček přejde do režimu offline atd.
- Nasměrujte uživatele na místo, kde může získat rozšíření. Stránka rozšíření může třeba poskytnout vyhledávací dotaz z Microsoft Storu, který zobrazí seznam rozšíření, která se dají použít s vaší aplikací.
- Zvažte, jak uživatele upozornit na přidání a odebrání rozšíření. Můžete vytvořit oznámení o tom, kdy je nainstalované nové rozšíření, a pozvat uživatele, aby ho povolil. Rozšíření by měla být ve výchozím nastavení zakázaná, aby uživatelé měli kontrolu nad nimi.
Jak se rozšíření aplikací liší od volitelných balíčků
Klíčovým rozdílem mezi volitelnými balíčky a rozšířeními aplikací je otevřený ekosystém a uzavřený ekosystém a závislý balíček versus nezávislý balíček.
Rozšíření aplikací se účastní otevřeného ekosystému. Pokud vaše aplikace může hostovat rozšíření aplikací, může kdokoli napsat rozšíření pro vašeho hostitele, pokud vyhovují vaší metodě předávání a přijímání informací z rozšíření. To se liší od volitelných balíčků, které se účastní uzavřeného ekosystému, kde vydavatel rozhodne, kdo může vytvořit volitelný balíček, který se dá s aplikací použít.
Rozšíření aplikací jsou nezávislé balíčky a můžou se jednat o samostatné aplikace. Nemůžou mít závislost nasazení na jiné aplikaci. Volitelné balíčky vyžadují primární balíček a bez něj nelze spustit.
Rozšiřovací balíček pro hru by byl dobrým kandidátem na volitelný balíček, protože je úzce svázaný se hrou, nemůže běžet nezávisle na hře a možná nechcete, aby rozšiřující balíčky byly vytvořeny pouze žádným vývojářem v ekosystému.
Pokud by stejná hra měla přizpůsobitelné doplňky uživatelského rozhraní nebo motivy, může být rozšíření aplikace dobrou volbou, protože aplikace poskytující rozšíření by mohla běžet samostatně a jakákoli třetí strana by je mohla učinit.
Poznámky
Toto téma obsahuje úvod k rozšířením aplikací. Klíčovými věcmi, které je třeba poznamenat, jsou vytvoření hostitele a jeho označení jako v souboru Package.appxmanifest, vytvoření rozšíření a jeho označení jako v souboru Package.appxmanifest, určení způsobu implementace rozšíření (například app service, úlohy na pozadí nebo jiných prostředků), definování způsobu komunikace hostitele s rozšířeními, a použití rozhraní AppExtensions API pro přístup k rozšířením a jejich správě.