Indexování aplikací a přímé odkazování
Xamarin.Forms indexování aplikací a důkladné propojování poskytují rozhraní API pro publikování metadat pro indexování aplikací při procházení aplikací uživateli. Indexovaný obsah se pak dá hledat ve vyhledávání Spotlightu, ve službě Google Search nebo ve vyhledávání na webu. Klepnutím na výsledek hledání, který obsahuje přímý odkaz, spustí událost, která může být zpracována aplikací, a obvykle se použije k přechodu na stránku, na kterou se odkazuje přímý odkaz.
Ukázková aplikace znázorňuje aplikaci seznamu úkolů, kde jsou data uložena v místní databázi SQLite, jak je znázorněno na následujících snímcích obrazovky:

Každá TodoItem instance vytvořená uživatelem je indexována. Hledání specifické pro platformu pak lze použít k vyhledání indexovaných dat z aplikace. Když uživatel klepne na položku výsledku hledání pro aplikaci, spustí se aplikace, přejde na adresu TodoItemPage a TodoItem zobrazí se odkaz na přímý odkaz.
Další informace o použití databáze SQLite naleznete v tématu Xamarin.Forms Local Databases .
Poznámka
Xamarin.Forms funkce indexování aplikací a důkladného propojování je dostupná jenom na platformách iOS a Android a vyžaduje minimálně iOS 9 a API 23 v uvedeném pořadí.
Nastavení
V následujících částech najdete další pokyny k instalaci pro používání této funkce na platformách iOS a Android.
iOS
Na platformě iOS zajistěte, aby projekt platformy iOS nastavoval soubor oprávnění. plist jako soubor vlastního oprávnění pro podepisování svazku.
Použití univerzálních odkazů pro iOS:
- Přidejte do své aplikace oprávnění k přidruženým doménám a
applinksklíč, včetně všech domén, které bude vaše aplikace podporovat. - Přidejte soubor pro přidružení webu aplikace Apple k webu.
- Přidejte
applinksklíč do souboru přidružení webu Apple App.
Další informace najdete v tématu Povolení propojení aplikací a webů s vaším obsahem v Developer.Apple.com.
Android
Na platformě Android existuje několik požadavků, které je potřeba splnit, aby bylo možné používat indexování aplikací a funkce podrobného propojení:
- Verze vaší aplikace musí být v Google Play živá.
- Doprovodný web musí být zaregistrován pro aplikaci v konzole pro vývojáře Google. Jakmile je aplikace přidružena k webu, mohou být adresy URL indexovány, které fungují jak pro web, tak pro aplikaci, které mohou být následně poskytovány ve výsledcích hledání. Další informace najdete v tématu indexování aplikací na webu Google Search na webu Google.
- Vaše aplikace musí podporovat záměry adresy URL HTTP na
MainActivitytřídě, která říká, že aplikace bude indexovat, jaké typy schémat dat URL aplikace může reagovat. Další informace najdete v tématu Konfigurace filtru záměrů.
Po splnění těchto požadavků je potřeba k používání Xamarin.Forms indexování aplikací a podrobného propojování na platformě Android následující další nastavení:
- Nainstalujte Xamarin. Forms . AppLinks/"data-LINKTYPE =" External ">Xamarin.Forms . AppLinks NuGet balíček do projektu aplikace pro Android.
- V souboru MainActivity. cs přidejte deklaraci, která bude používat obor názvů.
- V souboru MainActivity. cs přidejte deklaraci, která bude používat obor názvů.
- Ve webovém prohlížeči vytvořte pomocí konzoly Firebasenový projekt.
- V konzole Firebase přidejte Firebase do aplikace pro Android a zadejte požadovaná data.
- Stáhněte si výsledný soubor Google-Services. JSON .
- Přidejte soubor Google-Services. JSON do kořenového adresáře projektu pro Android a nastavte jeho akci sestavení na GoogleServicesJson.
- V
MainActivity.OnCreatepřepsání přidejte následující řádek kódu podForms.Init(this, bundle):
FirebaseApp.InitializeApp(this);
AndroidAppLinks.Init(this);
Když se do projektu přidá Google-Services. JSON (a je nastavená akce GoogleServicesJson* Build), proces sestavení extrahuje ID klienta a klíč rozhraní API a pak přidá tyto přihlašovací údaje do vygenerovaného souboru manifestu.
Poznámka
V tomto článku se výrazy, odkazy na aplikace a přímé odkazy často používají zaměnitelné. Na Androidu ale tyto výrazy mají samostatný význam. V systému Android je přímý odkaz takovým filtrem, který umožňuje uživatelům zadat do aplikace konkrétní aktivitu přímo. Kliknutí na přímý odkaz může otevřít dialog pro zrušení nejednoznačnosti, který umožňuje uživateli vybrat jednu z několika aplikací, které mohou tuto adresu URL zpracovat. Odkaz na aplikaci pro Android je přímý odkaz na základě vaší adresy URL vašeho webu, který byl ověřen, aby patřil do vašeho webu. Kliknutím na odkaz aplikace otevřete aplikaci, pokud je nainstalovaná, a to bez otevření dialogového okna pro zrušení nejednoznačnosti.
Další informace najdete Deep Link Content with Xamarin.Forms URL Navigation v blogu Xamarin.
Indexování stránky
Postup pro indexování stránky a její zpřístupnění pro vyhledávání na Google a Spotlight je následující:
- Vytvořte objekt obsahující
AppLinkEntrymetadata potřebná k indexování stránky společně s přímým odkazem, který se má vrátit na stránku, když uživatel vybere ve výsledcích hledání indexovaný obsah. - Zaregistrujte
AppLinkEntryinstanci pro účely jejího indexování.
Následující příklad kódu ukazuje, jak vytvořit AppLinkEntry instanci:
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;
}
AppLinkEntryInstance obsahuje počet vlastností, jejichž hodnoty jsou nutné k indexování stránky a vytvoření přímého odkazu. Xamarin_Forms _IAppLinkEntry_Title "data-LINKTYPE =" absolutní cesta ">Title Xamarin_Forms Title _IAppLinkEntry_Description data-linktype =" absolutní cesta ">Description a Xamarin_Forms _IAppLinkEntry_Thumbnail " data-LINKTYPE = "absolutní cesta" >Thumbnail vlastnosti jsou použity k identifikaci indexovaného obsahu, pokud se zobrazí ve výsledcích hledání. Vlastnost Xamarin_Forms _IAppLinkEntry_IsLinkActive data-LINKTYPE = "absolutní cesta >" IsLinkActive je nastavena na hodnotu, která true označuje, že indexovaný obsah je aktuálně zobrazen. Xamarin_Forms _IAppLinkEntry_AppLinkUri "data-LINKTYPE =" absolutní cesta ">AppLinkUri vlastnost Uri , která obsahuje informace potřebné pro návrat na aktuální stránku a zobrazení aktuálního TodoItem . Následující příklad ukazuje příklad Uri pro ukázkovou aplikaci:
http://deeplinking/DeepLinking.TodoItemPage?id=2
To Uri obsahuje všechny informace potřebné ke spuštění deeplinking aplikace, přechod na a DeepLinking.TodoItemPage zobrazí se s TodoItemID 2.
Registrace obsahu pro indexování
Po AppLinkEntry vytvoření instance je nutné ji zaregistrovat, aby se zobrazila ve výsledcích hledání. To se provádí pomocí Xamarin_Forms _IAppLinks_RegisterLink_ Xamarin_Forms _IAppLinkEntry_ "data-LINKTYPE =" absolutní cesta ">RegisterLink metoda, jak je znázorněno v následujícím příkladu kódu:
Application.Current.AppLinks.RegisterLink (appLink);
Tím se přidá AppLinkEntry instance do Xamarin_Forms aplikace AppLinkEntry _Application_AppLinks "data-LINKTYPE =" absolutní cesta ">AppLinks kolekce.
Poznámka
RegisterLinkMetodu lze také použít k aktualizaci obsahu, který byl indexován pro stránku.
Po AppLinkEntry registraci instance pro indexování se může zobrazit ve výsledcích hledání. Následující snímek obrazovky ukazuje indexovaný obsah ve výsledcích hledání na platformě iOS:

Zrušení registrace indexovaného obsahu
Xamarin_Forms _IAppLinks_DeregisterLink_ Xamarin_Forms _IAppLinkEntry_ "data-LINKTYPE =" absolutní cesta ">DeregisterLink Metoda slouží k odebrání indexovaného obsahu z výsledků hledání, jak je znázorněno v následujícím příkladu kódu:
Application.Current.AppLinks.DeregisterLink (appLink);
Tím se odebere AppLinkEntry instance z Xamarin_Forms aplikace AppLinkEntry _Application_AppLinks "data-LINKTYPE =" absolutní cesta ">AppLinks kolekce.
Poznámka
V Androidu není možné z výsledků hledání odebrat indexovaný obsah.
Reakce na přímý odkaz
Pokud se ve výsledcích hledání zobrazí indexovaný obsah a uživatel ho vybere, App bude třída pro aplikaci přijímat požadavek na zpracování Uri obsaženého v indexovaném obsahu. Tuto žádost lze zpracovat v Xamarin_Forms _Application_OnAppLinkRequestReceived_System_Uri_ "data-LINKTYPE =" absolutní cesta ">OnAppLinkRequestReceived přepsat, jak je znázorněno v následujícím příkladu kódu:
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);
}
}
Xamarin_Forms _Application_OnAppLinkRequestReceived_System_Uri_ "data-LINKTYPE =" absolutní cesta ">OnAppLinkRequestReceived Metoda kontroluje, zda Uri je pro aplikaci určen příjem, před analýzou na stránku, na kterou se má přejít, a parametru, který se má Uri předat stránce. Instance stránky, na kterou se má přejít, je vytvořena a TodoItem je načten parametr stránky. Xamarin_Forms _BindableObject_BindingContext "data-LINKTYPE =" absolutní cesta ">stránky, na kterou se má BindingContext Přejít, se pak nastaví na TodoItem . Tím je zajištěno, že když se TodoItemPage zobrazí Xamarin_Forms TodoItemPage _INavigation_PushAsync_ Xamarin_Forms _Page_ "data-LINKTYPE =" absolutní cesta ">metodou se zobrazí, PushAsyncTodoItem jehož umístění ID je obsaženo v přímém odkazu.
Zpřístupnění obsahu pro indexování vyhledávání
Pokaždé, když se zobrazí stránka reprezentovaná přímým odkazem, je možné vlastnost Xamarin_Forms _IAppLinkEntry_IsLinkActive data-LINKTYPE = "absolutní cesta >" AppLinkEntry.IsLinkActive nastavit na true . V případě iOS a Androidu je tato AppLinkEntry instance dostupná pro indexování vyhledávání a jenom v iOS, ale také zpřístupňuje AppLinkEntry instanci pro předání. Další informace o předání najdete v tématu Úvod k předání.
Následující příklad kódu ukazuje, jak nastavit Xamarin_Forms _IAppLinkEntry_IsLinkActive "data-LINKTYPE =" absolutní cesta ">AppLinkEntry.IsLinkActive vlastnost na true Xamarin_Forms AppLinkEntry.IsLinkActive _Page_OnAppearing data-LINKTYPE =" absolutní cesta ">Page.OnAppearing Přepsat:
protected override void OnAppearing()
{
appLink = GetAppLink(BindingContext as TodoItem);
if (appLink != null)
{
appLink.IsLinkActive = true;
}
}
Podobně platí, že pokud je stránka reprezentovaná přímým odkazem opuštěna, je možné vlastnost Xamarin_Forms _IAppLinkEntry_IsLinkActive "data-LINKTYPE =" absolutní cesta >" AppLinkEntry.IsLinkActive nastavit na hodnotu false . V systémech iOS a Android se tím zastaví AppLinkEntry instance inzerovaná pro indexování vyhledávání a jenom v iOS, zastaví se taky inzerování AppLinkEntry instance pro předání. To lze provést v Xamarin_Forms _Page_OnDisappearing "data-LINKTYPE =" absolutní cesta ">Page.OnDisappearing přepsání, jak je znázorněno v následujícím příkladu kódu:
protected override void OnDisappearing()
{
if (appLink != null)
{
appLink.IsLinkActive = false;
}
}
Poskytování dat k předání
V systému iOS lze data specifická pro aplikace ukládat při indexování stránky. Toho dosáhnete tak, že přidáte data do Xamarin_Forms _IAppLinkEntry_KeyValues "data-LINKTYPE =" absolutní cesta ">KeyValues shromažďování, což je Dictionary<string, string> pro ukládání párů klíč-hodnota, které se používají při předání. Předání je způsob, jakým uživatel spustí aktivitu na jednom ze svých zařízení a bude pokračovat v této aktivitě na jiném zařízení (jak identifikuje účet uživatele iCloud). Následující kód ukazuje příklad ukládání párů klíč-hodnota specifické pro aplikaci:
var pageLink = new AppLinkEntry
{
...
};
pageLink.KeyValues.Add("appName", App.AppName);
pageLink.KeyValues.Add("companyName", "Xamarin");
Hodnoty uložené v Xamarin_Forms _IAppLinkEntry_KeyValues "data-LINKTYPE =" absolutní cesta ">KeyValues kolekce budou uloženy v metadatech indexované stránky a budou obnoveny, když uživatel klepne na výsledek hledání, který obsahuje přímý odkaz (nebo když se k zobrazení obsahu na jiném přihlášeném zařízení používá předání).
Kromě toho lze zadat hodnoty pro následující klíče:
contentType– astring, který určuje identifikátor jednotného typu indexovaného obsahu. Doporučená konvence, která se má použít pro tuto hodnotu, je název typu stránky obsahující indexovaný obsah.associatedWebPage– astringpředstavuje webovou stránku, která se má navštívit, pokud se indexovaný obsah může zobrazit také na webu nebo pokud aplikace podporuje přímé odkazy prohlížeče Safari.shouldAddToPublicIndex– hodnota nebo , která určuje, jestli se má indexovaný obsah přidat do indexu veřejného cloudu Společnosti Apple, který se pak může zobrazit uživatelům, kteří si aplikaci nenainstalují na zařízení sstringtruefalseiOSem. To, že byl obsah nastavený pro veřejné indexování, ale neznamená, že se automaticky přidá do indexu veřejného cloudu Společnosti Apple. Další informace najdete v tématu Indexování veřejného vyhledávání. Všimněte si, že tento klíč by měl být při přidávání osobních údajů dofalseXamarin_Formsfalse_IAppLinkEntry_KeyValues" data-linktype="absolute-path">KeyValuesshromažďování.
Poznámka
Kolekce KeyValues se na platformě Androidu nepouží.
Další informace o předání najdete v tématu Úvod do předání.
Stažení ukázky