Obsługa aktywacji identyfikatora URI
Dowiedz się, jak zarejestrować aplikację, aby stać się domyślną aplikacją obsługującą dla nazwy schematu Uniform Resource Identifier (URI). Zarówno aplikacje desktopowe systemu Windows, jak i aplikacje platformy uniwersalnej systemu Windows (UWP) mogą rejestrować się jako domyślny obsługujący nazwy schematu identyfikatora URI. Jeśli użytkownik wybierze aplikację jako domyślną procedurę obsługi dla nazwy schematu identyfikatora URI, aplikacja zostanie aktywowana za każdym razem, gdy ten typ identyfikatora URI zostanie uruchomiony.
Zalecamy rejestrowanie nazwy schematu identyfikatora URI tylko wtedy, gdy oczekujesz obsługi wszystkich uruchomień identyfikatorów URI dla tego typu schematu. Jeśli zdecydujesz się zarejestrować nazwę schematu identyfikatora URI, musisz podać użytkownikowi końcowemu funkcję oczekiwaną po aktywowaniu aplikacji dla tego schematu identyfikatora URI. Na przykład aplikacja, która rejestruje się dla schematu identyfikatora URI mailto:, powinna otworzyć nową wiadomość e-mail, aby użytkownik mógł ją napisać. Aby uzyskać więcej informacji na temat skojarzeń identyfikatorów URI, zobacz Pliki, foldery i biblioteki.
W tych krokach pokazano, jak zarejestrować niestandardową nazwę schematu URI alsdk://
i jak aktywować aplikację, gdy użytkownik uruchomi URI alsdk://
.
Ważne interfejsy API
W tym temacie są używane następujące interfejsy API:
- Windows.ApplicationModel.Activation.ProtocolActivatedEventArgs
- Windows.UI.Xaml.Application.OnActivated
- AppInstance.GetActivatedEventArgs
Notatka
W systemie Windows niektóre identyfikatory URI i rozszerzenia plików są zarezerwowane do użytku przez wbudowane aplikacje i system operacyjny. Próby zarejestrowania aplikacji przy użyciu zastrzeżonego identyfikatora URI lub rozszerzenia pliku zostaną zignorowane. Zobacz zarezerwowane nazwy schematów URI i typy plików, aby uzyskać alfabetyczną listę schematów URI, których nie można zarejestrować w aplikacjach, ponieważ są zastrzeżone lub zabronione.
Krok 1. Określanie punktu rozszerzenia w manifeście pakietu
Aplikacja odbiera zdarzenia aktywacji tylko dla nazw schematów identyfikatorów URI wymienionych w manifeście pakietu. Poniżej przedstawiono sposób wskazywania, że aplikacja obsługuje nazwę schematu identyfikatora URI alsdk
.
W eksploratorze rozwiązań kliknij dwukrotnie plik package.appxmanifest, aby otworzyć projektanta manifestu. Wybierz kartę Deklaracje, a następnie z listy rozwijanej Dostępne deklaracje wybierz pozycję Protokół, a potem kliknij przycisk Dodaj.
Poniżej znajduje się krótki opis każdego pola, które można wypełnić w projektancie manifestu dla Protokołu (zobacz Manifest pakietu AppX, aby uzyskać szczegóły):
Pole | Opis |
---|---|
Logo | Określ logo używane do identyfikowania nazwy schematu identyfikatora URI w Ustaw programy domyślne na panelu sterowania . Jeśli nie określono logo, zostanie użyte małe logo aplikacji. |
nazwa wyświetlana | Określ nazwę wyświetlaną, aby zidentyfikować nazwę schematu identyfikatora URI w Ustaw programy domyślne na panelu sterowania . |
nazwa | Wybierz nazwę schematu identyfikatora URI. |
Uwaga Nazwa musi zawierać wszystkie małe litery. | |
zastrzeżone i zabronione typy plików Zobacz nazwy schematów identyfikatorów URI zarezerwowanych i typy plików dla alfabetycznej listy schematów identyfikatorów URI, których nie można zarejestrować w aplikacjach systemu Windows, ponieważ są one zastrzeżone lub zabronione. | |
Program wykonywalny | Określa domyślny plik wykonywalny do uruchamiania dla protokołu. Jeśli nie zostanie określony, zostanie użyty plik wykonywalny aplikacji. Jeśli zostanie określony, ciąg musi mieć długość od 1 do 256 znaków, musi kończyć się znakiem ".exe" i nie może zawierać następujących znaków: >, <, :, ", |, ?, lub *. Jeśli zostanie określony, używany jest również punktu wejścia. Jeśli nie określono punktu wejścia, używany jest punkt wejścia zdefiniowany dla aplikacji. |
punkt wejścia | Określa zadanie obsługujące rozszerzenie protokołu. Jest to zwykle w pełni kwalifikowana nazwa przestrzeni nazw typu środowiska uruchomieniowego systemu Windows. Jeśli nie zostanie określony, zostanie użyty punkt wejścia dla aplikacji. |
strona startowa | Strona internetowa, która obsługuje punkt rozszerzalności. |
grupa zasobów | Tag, którego można użyć do grupowania aktywacji rozszerzeń razem na potrzeby zarządzania zasobami. |
Pożądany Widok (tylko system Windows) | Określ pole Desired View, aby wskazać ilość miejsca, którego potrzebuje okno aplikacji podczas uruchamiania dla nazwy schematu identyfikatora URI. Możliwe wartości dla żądanego widoku to domyślne, bezużyteczne, półużyteczne, bardziej użytecznelub minimalnie użyteczne. Uwaga Windows uwzględnia wiele różnych czynników podczas określania końcowego rozmiaru okna aplikacji docelowej, na przykład preferencji aplikacji źródłowej, liczby aplikacji na ekranie, orientacji ekranu itd. Ustawienie żądanego widoku nie gwarantuje określonego sposobu działania okna dla aplikacji docelowej. Rodzina urządzeń przenośnych: żądany widok nie jest obsługiwany na tej rodzinie urządzeń. |
Wprowadź
images\Icon.png
jako logo .Wprowadź
SDK Sample URI Scheme
jako nazwę wyświetlanąWprowadź
alsdk
jako nazwę .Naciśnij Ctrl+S, aby zapisać zmianę w pliku package.appxmanifest.
Spowoduje to dodanie do manifestu pakietu elementu rozszerzenia , takiego jak ten. Kategoria windows.protocol wskazuje, że aplikacja obsługuje nazwę schematu identyfikatora URI
alsdk
.
<Applications>
<Application Id= ... >
<Extensions>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="alsdk">
<uap:Logo>images\icon.png</uap:Logo>
<uap:DisplayName>SDK Sample URI Scheme</uap:DisplayName>
</uap:Protocol>
</uap:Extension>
</Extensions>
...
</Application>
</Applications>
Krok 2. Dodawanie odpowiednich ikon
Aplikacje, które stają się domyślnymi dla nazwy schematu identyfikatora URI, mają swoje ikony wyświetlane w różnych miejscach systemu, na przykład w panelu sterowania Programy domyślne. Dołącz do projektu ikonę 44x44 w tym celu. Dopasuj wygląd logo kafelka aplikacji i użyj koloru tła swojej aplikacji zamiast sprawiać, by ikona była przezroczysta. Logo ma rozciągać się na krawędź bez marginesów. Przetestuj ikony na białych tłach. Zobacz Ikony aplikacji i loga, aby uzyskać więcej informacji o ikonach.
Krok 3. Obsługa aktywowanego zdarzenia
Notatka
W aplikacji WinUI, w funkcji App.OnLaunched (lub w zasadzie w dowolnym momencie), możesz wywołać metodę (AppInstance.GetActivatedEventArgs), aby pobrać parametry zdarzenia aktywacji i sprawdzić, w jaki sposób aplikacja została uruchomiona. Zobacz informacje o migracji funkcji cyklu życia aplikacji, aby uzyskać więcej informacji na temat różnic cyklu życia między aplikacjami UWP i WinUI.
W aplikacjach platformy UWP program obsługi zdarzeń OnActivated odbiera wszystkie zdarzenia aktywacji. Właściwość Kind wskazuje typ zdarzenia aktywacji. W tym przykładzie skonfigurowana jest obsługa zdarzeń aktywacji protokołu.
public partial class App
{
protected override void OnActivated(IActivatedEventArgs args)
{
if (args.Kind == ActivationKind.Protocol)
{
ProtocolActivatedEventArgs eventArgs = args as ProtocolActivatedEventArgs;
// TODO: Handle URI activation
// The received URI is eventArgs.Uri.AbsoluteUri
}
}
}
void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs const& args)
{
if (args.Kind() == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
{
auto protocolActivatedEventArgs{ args.as<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs>() };
// TODO: Handle URI activation
auto receivedURI{ protocolActivatedEventArgs.Uri().RawUri() };
}
}
void App::OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs^ args)
{
if (args->Kind == Windows::ApplicationModel::Activation::ActivationKind::Protocol)
{
Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^ eventArgs =
dynamic_cast<Windows::ApplicationModel::Activation::ProtocolActivatedEventArgs^>(args);
// TODO: Handle URI activation
// The received URI is eventArgs->Uri->RawUri
}
}
Notatka
Po uruchomieniu za pośrednictwem kontraktu protokołu upewnij się, że przycisk Wstecz przenosi użytkownika z powrotem na ekran, który uruchomił aplikację, a nie do poprzedniej zawartości aplikacji.
Poniższy kod programowo uruchamia aplikację za pomocą identyfikatora URI.
// Launch the URI
var uri = new Uri("alsdk:");
var success = await Windows.System.Launcher.LaunchUriAsync(uri)
Aby uzyskać więcej informacji na temat sposobu uruchamiania aplikacji za pośrednictwem identyfikatora URI, zobacz Uruchamianie domyślnej aplikacji dla identyfikatora URI.
Zaleca się, aby aplikacje utworzyły nowy XAML Frame dla każdego zdarzenia aktywacji, które otwiera nową stronę. W ten sposób stos nawigacyjny dla nowego XAML Frame nie będzie zawierał żadnej poprzedniej zawartości, którą aplikacja mogłaby mieć w bieżącym oknie, gdy zostanie zawieszona. Aplikacje, które zdecydują się używać pojedynczego ramki XAML do uruchamiania i kontraktów plików, powinny wyczyścić strony na ramce dziennika nawigacji przed przejściem do nowej strony.
Po uruchomieniu za pośrednictwem aktywacji protokołu aplikacje powinny rozważyć uwzględnienie interfejsu użytkownika, który umożliwia użytkownikowi powrót do górnej strony aplikacji.
Uwagi
Dowolna aplikacja lub witryna internetowa może używać nazwy schematu identyfikatora URI, w tym nawet złośliwych. Dlatego wszystkie dane, które otrzymujesz w identyfikatorze URI, mogą pochodzić z niezaufanego źródła. Zalecamy, aby nigdy nie wykonywać trwałego działania na podstawie parametrów otrzymanych w URI. Na przykład parametry identyfikatora URI mogą służyć do uruchamiania aplikacji na stronie konta użytkownika, ale zalecamy, aby nigdy nie używać ich do bezpośredniego modyfikowania konta użytkownika.
Uwaga
Jeśli tworzysz nową nazwę schematu identyfikatora URI dla aplikacji, postępuj zgodnie ze wskazówkami w RFC 4395. Dzięki temu twoja nazwa spełnia standardy schematów identyfikatorów URI.
Notatka
Po uruchomieniu aplikacji platformy UWP za pośrednictwem kontraktu protokołu upewnij się, że przycisk Wstecz przenosi użytkownika z powrotem na ekran, który uruchomił aplikację, a nie do poprzedniej zawartości aplikacji.
Zalecamy, aby aplikacje tworzyły nową ramkę XAML dla każdego zdarzenia aktywacji, które otwiera nowy cel URI. W ten sposób stos nawigacji dla nowego XAML Frame nie będzie zawierał żadnej poprzedniej zawartości, jaką aplikacja może mieć w bieżącym oknie po zawieszeniu.
Jeśli zdecydujesz, że chcesz, aby Twoje aplikacje używały jednej ramki XAML w przypadku uruchamiania i kontraktów protokołów, wyczyść strony w dzienniku nawigacji ramki zanim przejdziesz do nowej strony. Po uruchomieniu za pośrednictwem kontraktu protokołu rozważ uwzględnienie interfejsu użytkownika w aplikacjach, które umożliwiają użytkownikowi powrót do góry aplikacji.