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:
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:
- Dodaj uprawnienie Skojarzone domeny do aplikacji z kluczem
applinks
, w tym wszystkim domenami, które będzie obsługiwać aplikacja. - Dodaj plik skojarzenia witryny aplikacji firmy Apple do swojej witryny internetowej.
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:
- Wersja aplikacji musi być aktywna w sklepie Google Play.
- 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.
- 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:
- Zainstaluj program Xamarin.Forms. Pakiet NuGet AppLinks do projektu aplikacji systemu Android.
- W pliku MainActivity.cs dodaj deklarację, aby użyć
Xamarin.Forms.Platform.Android.AppLinks
przestrzeni nazw. - W pliku MainActivity.cs dodaj deklarację, aby użyć
Firebase
przestrzeni nazw. - W przeglądarce internetowej utwórz nowy projekt za pomocą konsoli firebase.
- W konsoli firebase dodaj firebase do aplikacji systemu Android i wprowadź wymagane dane.
- Pobierz wynikowy plik google-services.json .
- Dodaj plik google-services.json do katalogu głównego projektu systemu Android i ustaw jego akcję kompilacji na GoogleServicesJson.
- 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:
- 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. - 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
, Description
i 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.TodoItemPage
elementu 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:
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.
Odpowiadanie na link bezpośredni
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 false
wartość . 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ślastring
jednolity identyfikator typu indeksowanej zawartości. Zalecana konwencja do użycia dla tej wartości to nazwa typu strony zawierającej indeksowaną zawartość.associatedWebPage
— elementstring
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 lubstring
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 nafalse
wartość podczas dodawania danych osobowych do kolekcjiKeyValues
.
Uwaga
Kolekcja KeyValues
nie jest używana na platformie Android.
Aby uzyskać więcej informacji na temat przekazywania, zobacz Wprowadzenie do przekazywania.