Udostępnij za pośrednictwem


Indeksowanie aplikacji i tworzenie linku do strony docelowej

Xamarin.Forms Indeksowanie aplikacji i łączenie głębokie zapewniają interfejs API do publikowania metadanych na potrzeby indeksowania aplikacji, gdy użytkownicy przechodzą przez aplikacje. Następnie indeksowaną zawartość można wyszukiwać w funkcji Wyszukiwania w centrum uwagi, w wyszukiwaniu Google lub w wyszukiwaniu internetowym. Naciśnięcie wyniku wyszukiwania zawierającego link bezpośredni spowoduje wyzwolenie zdarzenia, które może być obsługiwane przez aplikację i jest zwykle używane do przechodzenia do strony, do którego odwołuje się link bezpośredni.

Przykładowa aplikacja demonstruje aplikację listy zadań do wykonania, w której dane są przechowywane w lokalnej bazie danych SQLite, jak pokazano na poniższych zrzutach ekranu:

Aplikacja todoList

Każde TodoItem wystąpienie utworzone przez użytkownika jest indeksowane. Wyszukiwanie specyficzne dla platformy może następnie służyć do lokalizowania indeksowanych danych z aplikacji. Gdy użytkownik naciągnie element wyniku wyszukiwania dla aplikacji, zostanie uruchomiona aplikacja, TodoItemPage nastąpi przejście do, a TodoItem odwołanie z linku głębokiego zostanie wyświetlone.

Aby uzyskać więcej informacji na temat korzystania z bazy danych SQLite, zobacz Xamarin.Forms Lokalne bazy danych.

Uwaga

Xamarin.Forms Funkcje indeksowania aplikacji i łączenia głębokiego są dostępne tylko na platformach iOS i Android i wymagają odpowiednio co najmniej systemu iOS 9 i interfejsu API 23.

Ustawienia

W poniższych sekcjach znajdują się dodatkowe instrukcje konfiguracji dotyczące korzystania z tej funkcji na platformach iOS i Android.

iOS

Na platformie iOS upewnij się, że projekt platformy systemu iOS ustawia plik Entitlements.plist jako plik uprawnień niestandardowych na potrzeby podpisywania pakietu.

Aby użyć linków uniwersalnych systemu iOS:

  1. Dodaj uprawnienie Skojarzone domeny do aplikacji z kluczem applinks , w tym wszystkim domenami, które będzie obsługiwać aplikacja.
  2. Dodaj plik skojarzenia witryny aplikacji firmy Apple do swojej witryny internetowej.
  3. applinks Dodaj klucz do pliku skojarzenia witryny aplikacji firmy Apple.

Aby uzyskać więcej informacji, zobacz Zezwalanie aplikacjom i witrynom internetowym na łączenie się z twoją zawartością w developer.apple.com.

Android

Na platformie Android istnieje wiele wymagań wstępnych, które należy spełnić, aby korzystać z indeksowania aplikacji i funkcji łączenia głębokiego:

  1. Wersja aplikacji musi być aktywna w sklepie Google Play.
  2. Witryna internetowa towarzysza musi być zarejestrowana w aplikacji w konsoli deweloperów firmy Google. Po skojarzeniu aplikacji z witryną internetową można indeksować adresy URL, które działają zarówno dla witryny internetowej, jak i aplikacji, które następnie mogą być obsługiwane w wynikach wyszukiwania. Aby uzyskać więcej informacji, zobacz Indeksowanie aplikacji w usłudze Google Search w witrynie internetowej Google.
  3. Aplikacja musi obsługiwać intencje adresów URL HTTP w MainActivity klasie, które informują aplikację o indeksowaniu typów danych adresów URL, na które aplikacja może reagować. Aby uzyskać więcej informacji, zobacz Konfigurowanie filtru intencji.

Po spełnieniu tych wymagań wstępnych do korzystania z Xamarin.Forms indeksowania aplikacji i łączenia głębokiego na platformie Android jest wymagana następująca dodatkowa konfiguracja:

  1. Zainstaluj program Xamarin.Forms. Pakiet NuGet AppLinks do projektu aplikacji systemu Android.
  2. W pliku MainActivity.cs dodaj deklarację, aby użyć Xamarin.Forms.Platform.Android.AppLinks przestrzeni nazw.
  3. W pliku MainActivity.cs dodaj deklarację, aby użyć Firebase przestrzeni nazw.
  4. W przeglądarce internetowej utwórz nowy projekt za pomocą konsoli firebase.
  5. W konsoli firebase dodaj firebase do aplikacji systemu Android i wprowadź wymagane dane.
  6. Pobierz wynikowy plik google-services.json .
  7. Dodaj plik google-services.json do katalogu głównego projektu systemu Android i ustaw jego akcję kompilacji na GoogleServicesJson.
  8. W zastąpieniu MainActivity.OnCreate dodaj następujący wiersz kodu poniżej:Forms.Init(this, bundle)
FirebaseApp.InitializeApp(this);
AndroidAppLinks.Init(this);

Po dodaniu google-services.json do projektu (a akcja kompilacji GoogleServicesJson* jest ustawiona), proces kompilacji wyodrębnia identyfikator klienta i klucz interfejsu API, a następnie dodaje te poświadczenia do wygenerowanego pliku manifestu.

Uwaga

W tym artykule często używane są linki do aplikacji terminów i linki głębokie. Jednak w systemie Android te terminy mają oddzielne znaczenie. W systemie Android link bezpośredni to filtr intencji, który umożliwia użytkownikom bezpośrednie wprowadzanie określonego działania w aplikacji. Kliknięcie linku głębokiego może otworzyć okno dialogowe uściślania, które umożliwia użytkownikowi wybranie jednej z wielu aplikacji, które mogą obsłużyć adres URL. Link aplikacji dla systemu Android to link bezpośredni na podstawie adresu URL witryny internetowej, który został zweryfikowany, aby należeć do witryny internetowej. Kliknięcie linku aplikacji otwiera aplikację, jeśli jest zainstalowana, bez otwierania okna dialogowego uściślania.

Aby uzyskać więcej informacji, zobacz Deep Link Content with URL Navigation (Zawartość linku głębokiego za pomocą nawigacji adresów Xamarin.Forms URL) w blogu platformy Xamarin.

Indeksowanie strony

Proces indeksowania strony i uwidaczniania jej w wyszukiwaniu Google i Spotlight jest następujący:

  1. Utwórz obiekt AppLinkEntry zawierający metadane wymagane do indeksowania strony oraz link bezpośredni, aby powrócić do strony, gdy użytkownik wybierze indeksowaną zawartość w wynikach wyszukiwania.
  2. Zarejestruj wystąpienie, AppLinkEntry aby zaindeksować je do wyszukiwania.

W poniższym przykładzie kodu pokazano, jak utworzyć AppLinkEntry wystąpienie:

AppLinkEntry GetAppLink(TodoItem item)
{
    var pageType = GetType().ToString();
    var pageLink = new AppLinkEntry
    {
        Title = item.Name,
        Description = item.Notes,
        AppLinkUri = new Uri($"http://{App.AppName}/{pageType}?id={item.ID}", UriKind.RelativeOrAbsolute),
        IsLinkActive = true,
        Thumbnail = ImageSource.FromFile("monkey.png")
    };

    pageLink.KeyValues.Add("contentType", "TodoItemPage");
    pageLink.KeyValues.Add("appName", App.AppName);
    pageLink.KeyValues.Add("companyName", "Xamarin");

    return pageLink;
}

Wystąpienie AppLinkEntry zawiera wiele właściwości, których wartości są wymagane do indeksowania strony i tworzenia linku głębokiego. Właściwości Title, Descriptioni Thumbnail służą do identyfikowania indeksowanej zawartości w wynikach wyszukiwania. Właściwość jest ustawiona IsLinkActive na wartość , aby wskazać true , że indeksowana zawartość jest obecnie przeglądana. Właściwość AppLinkUri jest elementem zawierającym Uri informacje wymagane do powrotu do bieżącej strony i wyświetlające bieżący element TodoItem. Poniższy przykład przedstawia przykład Uri przykładowej aplikacji:

http://deeplinking/DeepLinking.TodoItemPage?id=2

Zawiera on Uri wszystkie informacje wymagane do uruchomienia deeplinking aplikacji, przejdź do DeepLinking.TodoItemPageelementu i wyświetl element TodoItem z wartością ID 2.

Rejestrowanie zawartości na potrzeby indeksowania

Po utworzeniu AppLinkEntry wystąpienia należy go zarejestrować, aby indeksowanie było wyświetlane w wynikach wyszukiwania. Jest to realizowane za pomocą RegisterLink metody , jak pokazano w poniższym przykładzie kodu:

Application.Current.AppLinks.RegisterLink (appLink);

Spowoduje to dodanie AppLinkEntry wystąpienia do kolekcji AppLinks aplikacji.

Uwaga

Metoda RegisterLink może również służyć do aktualizowania zawartości indeksowanej dla strony.

Po zarejestrowaniu AppLinkEntry wystąpienia na potrzeby indeksowania można go wyświetlić w wynikach wyszukiwania. Poniższy zrzut ekranu przedstawia indeksowaną zawartość wyświetlaną w wynikach wyszukiwania na platformie iOS:

Indeksowana zawartość w wynikach wyszukiwania w systemie iOS

Anulowanie rejestrowania indeksowanej zawartości

Metoda DeregisterLink służy do usuwania indeksowanej zawartości z wyników wyszukiwania, jak pokazano w poniższym przykładzie kodu:

Application.Current.AppLinks.DeregisterLink (appLink);

Spowoduje to usunięcie AppLinkEntry wystąpienia z kolekcji AppLinks aplikacji.

Uwaga

W systemie Android nie można usunąć indeksowanej zawartości z wyników wyszukiwania.

Gdy indeksowana zawartość pojawi się w wynikach wyszukiwania i zostanie wybrana przez użytkownika, App klasa aplikacji otrzyma żądanie obsługi Uri zawartości zawartej w indeksowanej zawartości. To żądanie można przetworzyć w zastąpieniu OnAppLinkRequestReceived , jak pokazano w poniższym przykładzie kodu:

public class App : Application
{
    ...
    protected override async void OnAppLinkRequestReceived(Uri uri)
    {
        string appDomain = "http://" + App.AppName.ToLowerInvariant() + "/";
        if (!uri.ToString().ToLowerInvariant().StartsWith(appDomain, StringComparison.Ordinal))
            return;

        string pageUrl = uri.ToString().Replace(appDomain, string.Empty).Trim();
        var parts = pageUrl.Split('?');
        string page = parts[0];
        string pageParameter = parts[1].Replace("id=", string.Empty);

        var formsPage = Activator.CreateInstance(Type.GetType(page));
        var todoItemPage = formsPage as TodoItemPage;
        if (todoItemPage != null)
        {
            var todoItem = await App.Database.GetItemAsync(int.Parse(pageParameter));
            todoItemPage.BindingContext = todoItem;
            await MainPage.Navigation.PushAsync(formsPage as Page);
        }
        base.OnAppLinkRequestReceived(uri);
    }
}

Metoda OnAppLinkRequestReceived sprawdza, czy odebrane Uri jest przeznaczone dla aplikacji, przed przeanalizowanie Uri strony do przejścia do strony i parametru, który ma zostać przekazany do strony. Zostanie utworzone wystąpienie strony, do której ma zostać przejść, a TodoItem parametr strony jest reprezentowany przez parametr strony. Na BindingContext stronie, do która ma zostać wyświetlona, zostanie ustawiona wartość TodoItem. Gwarantuje to, że gdy TodoItemPage element jest wyświetlany przez metodę PushAsync , będzie wyświetlany TodoItem element, którego ID element znajduje się w linku głębokim.

Udostępnianie zawartości na potrzeby indeksowania wyszukiwania

Za każdym razem, gdy strona reprezentowana przez link bezpośredni jest wyświetlany, AppLinkEntry.IsLinkActive właściwość można ustawić na true. W systemach iOS i Android spowoduje AppLinkEntry to udostępnienie wystąpienia do indeksowania wyszukiwania i tylko w systemie iOS, a także udostępnia AppLinkEntry wystąpienie funkcji Handoff. Aby uzyskać więcej informacji na temat przekazywania, zobacz Wprowadzenie do przekazywania.

W poniższym przykładzie kodu pokazano ustawienie AppLinkEntry.IsLinkActive właściwości na true w zastąpieniu Page.OnAppearing :

protected override void OnAppearing()
{
    appLink = GetAppLink(BindingContext as TodoItem);
    if (appLink != null)
    {
        appLink.IsLinkActive = true;
    }
}

Podobnie, gdy strona reprezentowana przez link bezpośredni zostanie odchynięta, AppLinkEntry.IsLinkActive właściwość można ustawić na falsewartość . W systemach iOS i Android spowoduje to zatrzymanie AppLinkEntry anonsowania wystąpienia na potrzeby indeksowania wyszukiwania, a tylko w systemie iOS zatrzymuje anonsowanie AppLinkEntry wystąpienia funkcji Handoff. Można to zrobić w przesłonięć Page.OnDisappearing , jak pokazano w poniższym przykładzie kodu:

protected override void OnDisappearing()
{
    if (appLink != null)
    {
        appLink.IsLinkActive = false;
    }
}

Przekazywanie danych

W systemie iOS dane specyficzne dla aplikacji mogą być przechowywane podczas indeksowania strony. Jest to osiągane przez dodanie danych do kolekcji, która jest elementem służącym Dictionary<string, string> do KeyValues przechowywania par klucz-wartość używanych w handoff. Przekazywanie to sposób, w jaki użytkownik może rozpocząć działanie na jednym z urządzeń i kontynuować to działanie na innych urządzeniach (zidentyfikowane przez konto użytkownika w usłudze iCloud). Poniższy kod przedstawia przykład przechowywania par klucz-wartość specyficznych dla aplikacji:

var pageLink = new AppLinkEntry
{
    ...
};
pageLink.KeyValues.Add("appName", App.AppName);
pageLink.KeyValues.Add("companyName", "Xamarin");

Wartości przechowywane w KeyValues kolekcji będą przechowywane w metadanych strony indeksowanej i zostaną przywrócone, gdy użytkownik naciągnie wynik wyszukiwania zawierający link bezpośredni (lub gdy funkcja Handoff jest używana do wyświetlania zawartości na innym zalogowanym urządzeniu).

Ponadto można określić wartości dla następujących kluczy:

  • contentType — określa string jednolity identyfikator typu indeksowanej zawartości. Zalecana konwencja do użycia dla tej wartości to nazwa typu strony zawierającej indeksowaną zawartość.
  • associatedWebPage — element string reprezentujący stronę internetową do odwiedzenia, jeśli indeksowana zawartość może być również widoczna w Internecie, lub jeśli aplikacja obsługuje linki głębokie przeglądarki Safari.
  • shouldAddToPublicIndex — element lub string true false określa, czy dodać indeksowaną zawartość do indeksu chmury publicznej firmy Apple, który może być następnie prezentowany użytkownikom, którzy nie zainstalowały aplikacji na urządzeniu z systemem iOS. Jednak tylko dlatego, że zawartość została ustawiona na potrzeby indeksowania publicznego, nie oznacza to, że zostanie ona automatycznie dodana do indeksu chmury publicznej firmy Apple. Aby uzyskać więcej informacji, zobacz Indeksowanie wyszukiwania publicznego. Należy pamiętać, że ten klucz powinien być ustawiony na false wartość podczas dodawania danych osobowych do kolekcji KeyValues .

Uwaga

Kolekcja KeyValues nie jest używana na platformie Android.

Aby uzyskać więcej informacji na temat przekazywania, zobacz Wprowadzenie do przekazywania.