Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperlihatkan kepada Anda cara membuat ekstensi aplikasi Windows 10 dan menghostingnya di aplikasi. Ekstensi aplikasi didukung di aplikasi UWP dan aplikasi desktop paket .
Untuk menunjukkan cara membuat ekstensi aplikasi, artikel ini menggunakan manifes paket XML dan cuplikan kode dari sampel kode Ekstensi Matematika . Sampel ini adalah aplikasi UWP, tetapi fitur yang ditunjukkan dalam sampel juga berlaku untuk aplikasi desktop yang dikemas. Ikuti instruksi berikut untuk memulai sampel:
- Unduh dan unzip sampel kode Ekstensi Matematika .
- Di Visual Studio 2019, buka MathExtensionSample.sln. Atur jenis build ke x86 (
Build Configuration Manager , lalu ubah Platformmenjadi x86 untuk kedua proyek). - Terapkan solusi: Bangun>Terapkan Solusi.
Pengantar ekstensi aplikasi
Di Windows 10, ekstensi aplikasi memberikan fungsionalitas yang mirip seperti yang dilakukan oleh plugin, add-in, dan add-on pada platform lain. Ekstensi aplikasi diperkenalkan dalam edisi Windows 10 Anniversary (versi 1607, build 10.0.14393).
Ekstensi aplikasi adalah aplikasi UWP atau aplikasi desktop kemasan yang memiliki deklarasi ekstensi yang memungkinkan mereka berbagi konten dan peristiwa penyebaran dengan aplikasi host. Aplikasi ekstensi dapat menyediakan beberapa ekstensi.
Karena ekstensi aplikasi hanyalah aplikasi UWP atau aplikasi desktop yang dipaketkan, ekstensi aplikasi tersebut juga dapat berfungsi penuh, ekstensi host, dan menyediakan ekstensi ke aplikasi lain--semua tanpa membuat paket aplikasi terpisah.
Saat membuat host ekstensi aplikasi, Anda membuat kesempatan untuk mengembangkan ekosistem di sekitar aplikasi anda di mana pengembang lain dapat meningkatkan aplikasi anda dengan cara yang mungkin tidak anda harapkan atau memiliki sumber daya untuk. Pertimbangkan ekstensi Microsoft Office, ekstensi Visual Studio, ekstensi browser, dll. Ini menciptakan pengalaman yang lebih kaya untuk aplikasi yang melampaui fungsionalitas yang mereka kirimkan. Ekstensi dapat menambahkan nilai dan umur panjang ke aplikasi Anda.
Pada tingkat tinggi, untuk menyiapkan hubungan ekstensi aplikasi, kita perlu:
- Nyatakan aplikasi untuk menjadi host ekstensi.
- Mendeklarasikan aplikasi untuk menjadi ekstensi.
- Putuskan apakah akan menerapkan ekstensi sebagai layanan aplikasi, tugas latar belakang, atau cara lain.
- Tentukan bagaimana host dan ekstensinya akan berkomunikasi.
- Gunakan Windows.ApplicationModel.AppExtensions API di aplikasi host untuk mengakses ekstensi.
Mari kita lihat bagaimana hal ini dilakukan dengan memeriksa sampel kode Ekstensi Matematika yang mengimplementasikan kalkulator hipotetis yang dapat Anda tambahkan fungsi baru dengan menggunakan ekstensi. Di Microsoft Visual Studio 2019, muat MathExtensionSample.sln dari sampel kode.
Mendeklarasikan aplikasi untuk menjadi host ekstensi
Aplikasi mengidentifikasi dirinya sebagai host ekstensi aplikasi dengan mendeklarasikan elemen <AppExtensionHost>
dalam file Package.appxmanifest-nya. Lihat file Package.appxmanifest di proyek MathExtensionHost untuk melihat bagaimana hal ini dilakukan.
Package.appxmanifest dalam proyek 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>
Perhatikan xmlns:uap3="http://..."
dan keberadaan uap3
di IgnorableNamespaces
. Ini diperlukan karena kita menggunakan namespace uap3.
<uap3:Extension Category="windows.appExtensionHost">
mengidentifikasi aplikasi ini sebagai host ekstensi.
Nama elemen di <uap3:AppExtensionHost>
adalah nama kontrak ekstensi . Ketika ekstensi menentukan nama kontrak ekstensi yang sama, host akan dapat menemukannya. Berdasarkan konvensi, sebaiknya buat nama kontrak ekstensi menggunakan nama aplikasi atau penerbit Anda untuk menghindari potensi tabrakan dengan nama kontrak ekstensi lainnya.
Anda dapat menentukan beberapa host dan beberapa ekstensi di aplikasi yang sama. Dalam contoh ini, kami mendeklarasikan satu host. Ekstensi didefinisikan di aplikasi lain.
Mendeklarasikan aplikasi untuk menjadi ekstensi
Aplikasi mengidentifikasi dirinya sebagai ekstensi aplikasi dengan mendeklarasikan elemen <uap3:AppExtension>
dalam file Package.appxmanifest. Buka file Package.appxmanifest di dalam proyek MathExtension untuk melihat bagaimana hal ini dilakukan.
Package.appxmanifest dalam proyek 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>
Sekali lagi, perhatikan garis xmlns:uap3="http://..."
, dan keberadaan uap3
di IgnorableNamespaces
. Ini diperlukan karena kita menggunakan namespace uap3
.
<uap3:Extension Category="windows.appExtension">
mengidentifikasi aplikasi ini sebagai ekstensi.
Arti atribut <uap3:AppExtension>
adalah sebagai berikut:
Karakteristik | Deskripsi | Diperlukan |
---|---|---|
Nama | Ini adalah nama kontrak perpanjangan. Ketika cocok dengan nama yang dideklarasikan dalam host, host tersebut akan dapat menemukan ekstensi ini. | ✔️ |
ID | Secara unik mengidentifikasi ekstensi ini. Karena mungkin ada beberapa ekstensi yang menggunakan nama kontrak ekstensi yang sama (bayangkan aplikasi cat yang mendukung beberapa ekstensi), Anda dapat menggunakan ID untuk membedakannya. Host ekstensi aplikasi dapat menggunakan ID untuk menyimpulkan sesuatu tentang jenis ekstensi. Misalnya, Anda dapat memiliki satu Ekstensi yang dirancang untuk desktop dan yang lain untuk seluler, dengan ID menjadi pembferensi. Anda juga dapat menggunakan elemen Properti, yang dibahas di bawah ini, untuk itu. | ✔️ |
Nama Tampilan | Dapat digunakan dari aplikasi host Anda untuk mengidentifikasi ekstensi kepada pengguna. Ini dapat dikueri dari, dan dapat menggunakan, sistem manajemen sumber daya baru (ms-resource:TokenName ) untuk pelokalan. Konten yang dilokalkan dimuat dari paket ekstensi aplikasi, bukan aplikasi host. |
|
Deskripsi | Dapat digunakan dari aplikasi host Anda untuk menjelaskan ekstensi kepada pengguna. Ini dapat dikueri dari, dan dapat menggunakan, sistem manajemen sumber daya baru (ms-resource:TokenName ) untuk pelokalan. Konten yang dilokalkan dimuat dari paket ekstensi aplikasi, bukan aplikasi host. |
|
PublicFolder | Nama folder, relatif terhadap akar paket, tempat Anda dapat berbagi konten dengan host ekstensi. Menurut konvensi, namanya adalah "Publik", tetapi Anda dapat menggunakan nama apa pun yang cocok dengan folder di ekstensi Anda. | ✔️ |
<uap3:Properties>
adalah elemen opsional yang berisi metadata kustom yang dapat dibaca host saat runtime. Dalam sampel kode, ekstensi diimplementasikan sebagai layanan aplikasi sehingga host memerlukan cara untuk mendapatkan nama layanan aplikasi tersebut sehingga dapat memanggilnya. Nama layanan aplikasi didefinisikan dalam elemen <Service>, yang kami tentukan (kami bisa menyebutnya apa pun yang kami inginkan). Host dalam sampel kode mencari properti ini saat runtime untuk mempelajari nama layanan aplikasi.
Tentukan bagaimana Anda akan menerapkan ekstensi.
Sesi Build 2016 tentang ekstensi aplikasi menunjukkan cara menggunakan folder publik yang dibagikan antara host dan ekstensi. Dalam contoh itu, ekstensi diimplementasikan oleh file JavaScript yang disimpan di folder publik, yang dipanggil host. Pendekatan itu memiliki keuntungan ringan, tidak memerlukan kompilasi, dan dapat mendukung pembuatan halaman arahan default yang menyediakan instruksi untuk ekstensi dan tautan ke halaman Microsoft Store aplikasi host. Lihat sampel kode ekstensi aplikasi Build 2016 untuk detailnya. Secara khusus, lihat proyek
Dalam contoh ini, kita akan menggunakan layanan aplikasi untuk mengimplementasikan ekstensi. Layanan aplikasi memiliki keuntungan berikut:
- Jika ekstensi crash, ekstensi tidak akan menurunkan aplikasi host karena aplikasi host berjalan dalam prosesnya sendiri.
- Anda dapat menggunakan bahasa pilihan Anda untuk menerapkan layanan. Tidak perlu mencocokkan bahasa yang digunakan untuk mengimplementasikan aplikasi host.
- Layanan aplikasi memiliki akses ke kontainer aplikasinya sendiri--yang mungkin memiliki kemampuan yang berbeda dari yang dimiliki host.
- Ada isolasi antara data dalam layanan dan aplikasi host.
Kode layanan aplikasi host
Berikut adalah kode host yang memanggil layanan aplikasi ekstensi:
ExtensionManager.cs dalam proyek 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
}
Ini adalah kode umum untuk memanggil layanan aplikasi. Untuk detail tentang cara menerapkan dan memanggil layanan aplikasi, lihat Cara membuat dan menggunakan layanan aplikasi.
Satu hal yang perlu diperhatikan adalah bagaimana nama layanan aplikasi yang akan dipanggil ditentukan. Karena host tidak memiliki informasi tentang implementasi ekstensi, ekstensi perlu memberikan nama layanan aplikasinya. Dalam sampel kode, ekstensi mendeklarasikan nama layanan aplikasi dalam filenya di elemen <uap3:Properties>
:
Package.appxmanifest dalam proyek MathExtension
...
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension ...>
<uap3:Properties>
<Service>com.microsoft.powservice</Service>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
Anda dapat menentukan XML Anda sendiri di elemen <uap3:Properties>
. Dalam hal ini, kami menentukan nama layanan aplikasi sehingga host dapat melakukannya saat memanggil ekstensi.
Ketika host memuat ekstensi, kode ini mengekstrak nama layanan dari properti yang ditentukan dalam ekstensi Package.appxmanifest.
Update()
di ExtensionManager.cs, dalam proyek 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
Dengan nama layanan aplikasi yang disimpan di _serviceName
, host dapat menggunakannya untuk memanggil layanan aplikasi.
Memanggil layanan aplikasi juga memerlukan nama famili paket yang berisi layanan aplikasi. Untungnya, API ekstensi aplikasi menyediakan informasi ini yang diperoleh di baris: connection.PackageFamilyName = AppExtension.Package.Id.FamilyName;
Tentukan bagaimana host dan ekstensi akan berkomunikasi
Layanan aplikasi menggunakan ValueSet untuk bertukar informasi. Sebagai penulis host, Anda perlu membuat protokol untuk berkomunikasi dengan ekstensi yang fleksibel. Dalam sampel kode, itu berarti mempertimbangkan fungsi tambahan yang mungkin menerima 1, 2, atau lebih argumen di masa mendatang.
Untuk contoh ini, protokol untuk argumen adalah ValueSet Result
yang berisi nilai perhitungan. Jika kunci tersebut tidak ada, host mengasumsikan bahwa ekstensi tidak dapat menyelesaikan perhitungan.
Kode layanan aplikasi ekstensi
Dalam sampel kode, layanan aplikasi ekstensi tidak diimplementasikan sebagai tugas latar belakang. Sebaliknya, ia menggunakan model layanan aplikasi proc tunggal tempat layanan aplikasi berjalan dalam proses yang sama dengan aplikasi ekstensi yang menghostingnya. Ini masih merupakan proses yang berbeda dari aplikasi host, memberikan manfaat pemisahan proses, sambil mendapatkan beberapa manfaat performa dengan menghindari komunikasi lintas proses antara proses ekstensi dan proses latar belakang yang mengimplementasikan layanan aplikasi. Lihat Mengonversi layanan aplikasi untuk dijalankan dalam proses yang sama dengan aplikasi hostnya untuk melihat perbedaan antara layanan aplikasi yang berjalan sebagai tugas latar belakang versus dalam proses yang sama.
Sistem beralih ke OnBackgroundActivate()
ketika layanan aplikasi diaktifkan. Kode itu menyiapkan penangan kejadian untuk menangani panggilan layanan aplikasi yang sebenarnya ketika datang (OnAppServiceRequestReceived()
) serta menghadapi peristiwa pemeliharaan seperti mendapatkan objek penundaan yang menyikapi peristiwa pembatalan atau penutupan.
App.xaml.cs di proyek 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;
}
}
Kode yang melaksanakan tugas ekstensi ada di OnAppServiceRequestReceived()
. Fungsi ini dipanggil ketika layanan aplikasi dipanggil untuk melakukan penghitungan. Ini mengekstrak nilai yang dibutuhkan dari ValueSet. Jika sistem dapat melakukan perhitungan, sistem menempatkan hasilnya dengan kunci bernama Resultdalam ValueSet yang dikembalikan ke host. Ingat bahwa sesuai dengan protokol yang ditentukan tentang cara host ini dan ekstensinya akan berkomunikasi, kehadiran kunci Hasil akan menunjukkan keberhasilan; jika tidak, kegagalan.
App.xaml.cs di proyek 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();
}
Mengelola ekstensi
Sekarang setelah kita melihat cara menerapkan hubungan antara host dan ekstensinya, mari kita lihat bagaimana host menemukan ekstensi yang diinstal pada sistem dan bereaksi terhadap penambahan dan penghapusan paket yang berisi ekstensi.
Microsoft Store mengirimkan ekstensi sebagai paket. AppExtensionCatalog menemukan paket terinstal yang berisi ekstensi yang cocok dengan nama kontrak ekstensi host, dan menyediakan peristiwa yang diaktifkan ketika paket ekstensi aplikasi yang relevan dengan host diinstal atau dihapus.
Dalam sampel kode, kelas
Konstruktor ExtensionManager
menggunakan AppExtensionCatalog
untuk menemukan ekstensi aplikasi pada sistem yang memiliki nama kontrak ekstensi yang sama dengan host:
ExtensionManager.cs dalam proyek MathExtensionHost.
public ExtensionManager(string extensionContractName)
{
// catalog & contract
ExtensionContractName = extensionContractName;
_catalog = AppExtensionCatalog.Open(ExtensionContractName);
...
}
Ketika paket ekstensi diinstal, ExtensionManager
mengumpulkan informasi tentang ekstensi dalam paket yang memiliki nama kontrak ekstensi yang sama dengan host. Penginstalan dapat mewakili pembaruan dalam hal ini informasi ekstensi yang terpengaruh diperbarui. Ketika paket ekstensi dihapus, ExtensionManager
menghapus informasi tentang ekstensi yang terpengaruh sehingga pengguna tahu ekstensi mana yang tidak lagi tersedia.
Kelas
Untuk mengatakan bahwa ekstensi dimuat (lihat Load()
dalam ExtensionManager.cs) berarti bahwa status paket baik-baik saja dan bahwa kami telah mendapatkan ID, logo, deskripsi, dan folder publiknya (yang tidak kami gunakan dalam sampel ini hanya untuk menunjukkan bagaimana Anda mendapatkannya). Paket ekstensi itu sendiri tidak dimuat.
Konsep penonaktifan digunakan untuk melacak ekstensi mana yang tidak lagi ditampilkan kepada pengguna.
ExtensionManager
menyediakan koleksi Extension
instans sehingga ekstensi, nama, deskripsi, dan logonya dapat terikat data ke UI. Halaman ExtensionsTab mengikat koleksi ini dan menyediakan UI untuk mengaktifkan/menonaktifkan ekstensi serta menghapusnya.
Tab Ekstensi contoh UI
Ketika ekstensi dihapus, sistem meminta pengguna untuk memverifikasi bahwa mereka ingin menghapus instalan paket yang berisi ekstensi (dan mungkin berisi ekstensi lain). Jika pengguna setuju, paket dihapus instalasinya dan ExtensionManager
menghapus ekstensi dalam paket yang dihapus dari daftar ekstensi yang tersedia untuk aplikasi host.
Men-debug ekstensi dan host aplikasi
Sering kali, host ekstensi dan ekstensi tidak termasuk dalam solusi yang sama. Dalam hal ini, untuk men-debug host dan ekstensi:
- Muat proyek host Anda dalam satu instans Visual Studio.
- Muat ekstensi Anda di instans lain Visual Studio.
- Luncurkan aplikasi host Anda di debugger.
- Luncurkan aplikasi ekstensi di debugger. Jika Anda ingin menerapkan ekstensi untuk menguji peristiwa penginstalan paket host, daripada men-debug-nya, lakukan Membangun > Menerapkan Solusisebagai gantinya.
Sekarang Anda akan dapat mencapai titik henti di host dan ekstensi. Jika Anda mulai men-debug aplikasi ekstensi itu sendiri, Anda akan melihat jendela kosong untuk aplikasi. Jika Anda tidak ingin melihat jendela kosong, Anda dapat mengubah pengaturan penelusuran kesalahan untuk proyek ekstensi agar tidak meluncurkan aplikasi, melainkan men-debugnya ketika aplikasi dimulai (klik kanan proyek ekstensi, Properti>Debug> pilih Jangan luncurkan, tetapi debug kode saya saat dimulai). Anda masih perlu mulai menelusuri kesalahan (F5) proyek ekstensi, tetapi akan menunggu sampai host mengaktifkan ekstensi dan kemudian titik henti Anda di ekstensi akan tercapai.
Mendebug contoh kode
Dalam sampel kode, host dan ekstensi berada dalam solusi yang sama. Lakukan hal berikut untuk men-debug:
- Pastikan
MathExtensionHost adalah proyek startup (klik kanan proyekMathExtensionHost, klik Atur sebagai proyek StartUp ). - Letakkan titik henti di
di ExtensionManager.cs dalam proyek MathExtensionHost. - F5 untuk menjalankan proyek MathExtensionHost.
- Letakkan titik henti pada
di App.xaml.cs di proyek MathExtension . - Mulai debugging pada proyek MathExtension (klik kanan pada proyek MathExtension, pilih Debug dan kemudian Mulai instans baru >), yang akan menyebarkan proyek tersebut dan memicu peristiwa penginstalan paket di host.
- Di aplikasi MathExtensionHost, navigasikan ke halaman Perhitungan, dan klik x^y untuk mengaktifkan ekstensi. Titik patah
Invoke()
terkena terlebih dahulu, dan Anda dapat melihat panggilan layanan aplikasi ekstensi sedang dilakukan. Kemudian metodeOnAppServiceRequestReceived()
dalam ekstensi dijalankan, dan Anda dapat melihat layanan aplikasi menghitung hasilnya dan mengembalikannya.
Ekstensi pemecahan masalah yang diterapkan sebagai layanan aplikasi
Jika host ekstensi Anda mengalami masalah saat menyambungkan ke layanan aplikasi untuk ekstensi Anda, pastikan atribut <uap:AppService Name="...">
cocok dengan apa yang Anda masukkan ke dalam elemen <Service>
Anda. Jika tidak cocok, nama layanan yang diberikan ekstensi Anda kepada host tidak akan cocok dengan nama layanan aplikasi yang Anda terapkan, dan host tidak akan dapat mengaktifkan ekstensi Anda.
Package.appxmanifest dalam proyek 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>
Daftar periksa skenario dasar untuk diuji
Ketika Anda membangun host ekstensi dan siap untuk menguji seberapa baik dukungan ekstensi, berikut adalah beberapa skenario dasar untuk dicoba:
- Jalankan host lalu sebarkan aplikasi ekstensi
- Apakah host mengambil ekstensi baru yang muncul saat sedang berjalan?
- Sebarkan aplikasi ekstensi lalu sebarkan dan jalankan host.
- Apakah host mengambil ekstensi yang sudah ada sebelumnya?
- Jalankan host lalu hapus aplikasi ekstensi.
- Apakah host mendeteksi penghapusan dengan benar?
- Jalankan host lalu perbarui aplikasi ekstensi ke versi yang lebih baru.
- Apakah host mendeteksi perubahan dan memuat versi lama ekstensi dengan benar?
Skenario tingkat lanjut untuk diuji:
- Jalankan host, pindahkan aplikasi ekstensi ke media yang dapat dilepas, hapus media
- Apakah host mendeteksi perubahan status paket dan menonaktifkan ekstensi?
- Jalankan host, lalu rusak aplikasi ekstensi (buat tidak valid, ditandatangani secara berbeda, dll.)
- Apakah host mendeteksi ekstensi yang dirusak dan menanganinya dengan benar?
- Jalankan host, lalu sebarkan aplikasi ekstensi yang memiliki konten atau properti yang tidak valid
- Apakah host mendeteksi konten yang tidak valid dan menanganinya dengan benar?
Pertimbangan desain
- Berikan UI yang menunjukkan pengguna ekstensi mana yang tersedia dan memungkinkan mereka mengaktifkan/menonaktifkannya. Anda mungkin juga mempertimbangkan untuk menambahkan simbol untuk ekstensi yang tidak lagi tersedia akibat paket terputus, dll.
- Arahkan pengguna ke tempat mereka bisa mendapatkan ekstensi. Mungkin halaman ekstensi Anda dapat menyediakan kueri pencarian Microsoft Store yang memunculkan daftar ekstensi yang dapat digunakan dengan aplikasi Anda.
- Pertimbangkan cara memberi tahu pengguna tentang penambahan dan penghapusan ekstensi. Anda dapat membuat pemberitahuan saat ekstensi baru diinstal dan mengundang pengguna untuk mengaktifkannya. Ekstensi harus dinonaktifkan secara default sehingga pengguna memegang kendali.
Perbedaan ekstensi aplikasi dengan paket opsional
Pembferensi utama antara paket opsional dan ekstensi aplikasi adalah ekosistem terbuka versus ekosistem tertutup, dan paket dependen versus paket independen.
Ekstensi aplikasi berpartisipasi dalam ekosistem terbuka. Jika aplikasi Anda dapat menghosting ekstensi aplikasi, siapa pun dapat menulis ekstensi untuk host Anda selama mereka mematuhi metode Anda untuk meneruskan/menerima informasi dari ekstensi. Ini berbeda dari paket opsional yang berpartisipasi dalam ekosistem tertutup di mana penerbit memutuskan siapa yang diizinkan untuk membuat paket opsional yang dapat digunakan dengan aplikasi.
Ekstensi aplikasi adalah paket independen dan dapat berupa aplikasi mandiri. Mereka tidak dapat memiliki ketergantungan penyebaran terhadap aplikasi lain. Paket opsional memerlukan paket utama dan tidak dapat berjalan tanpanya.
Paket ekspansi untuk game akan menjadi kandidat yang baik untuk paket opsional karena terikat erat ke game, itu tidak dapat berjalan secara independen dari game, dan Anda mungkin tidak ingin paket ekspansi dibuat oleh pengembang apa pun di ekosistem.
Jika game yang sama memiliki add-on atau tema UI yang dapat disesuaikan, maka ekstensi aplikasi bisa menjadi pilihan yang baik karena aplikasi yang menyediakan ekstensi dapat berjalan sendiri, dan pihak ke-3 mana pun dapat membuatnya.
Komentar
Topik ini menyediakan pengenalan ekstensi aplikasi. Hal-hal utama yang perlu diperhatikan adalah pembuatan host dan menandainya seperti dalam file Package.appxmanifest, membuat ekstensi dan menandainya seperti dalam file Package.appxmanifest, menentukan cara mengimplementasikan ekstensi (seperti layanan aplikasi, tugas latar belakang, atau cara lain), menentukan bagaimana host akan berkomunikasi dengan ekstensi, dan menggunakan API appExtensions
Topik terkait
- Pengenalan Ekstensi Aplikasi
- Sesi Build 2016 tentang ekstensi aplikasi
- sampel kode ekstensi aplikasi Build 2016
- Mendukung aplikasi Anda dengan tugas latar belakang
- Cara membuat dan menggunakan layanan aplikasi.
- namespace
AppExtensions - Perluas aplikasi Anda dengan layanan, ekstensi, dan paket