Uygulama Dizini Oluşturma ve Ayrıntılı Bağlantı Sağlama
Xamarin.Forms uygulama dizini oluşturma ve derin bağlantı, kullanıcılar uygulamalarda gezinken uygulama dizini oluşturma için meta verileri yayımlamak için bir API sağlar. Dizine alınan içerik daha sonra Spotlight Search'te, Google Search'te veya bir web aramada aranır. Derin bağlantı içeren bir arama sonucuna dokunulduğunda, bir uygulama tarafından işlanlan bir olay etkin olur ve genellikle derin bağlantıdan başvurulan sayfaya gitmek için kullanılır.
Örnek uygulama, aşağıdaki ekran görüntülerinde gösterildiği gibi verilerin yerel bir SQLite veritabanında depolandığı bir Todo listesi uygulamasını gösterir:

Kullanıcı TodoItem tarafından oluşturulan her örnek dizine oluşturulur. Daha sonra platforma özgü arama, uygulamanın dizine verilerini bulmak için kullanılabilir. Kullanıcı uygulama için bir arama sonucu öğesine dokunarak uygulama başlatıldı, öğesine gidildi ve derin bağlantıdan TodoItemPageTodoItem başvurulan öğe görüntüleniyor.
SQLite veritabanı kullanma hakkında daha fazla bilgi için bkz. Xamarin.Forms Local Databases .
Not
Xamarin.Forms uygulama dizini oluşturma ve derin bağlantı işlevselliği yalnızca iOS ve Android platformlarında kullanılabilir ve sırasıyla en az iOS 9 ve API 23 gerektirir.
Kurulum
Aşağıdaki bölümlerde, iOS ve Android platformlarında bu özelliği kullanmaya yönelik ek kurulum yönergeleri sağlanmıştır.
iOS
iOS platformunda, iOS platform projenizin Entitlements.plist dosyasını paketi imzalamak için özel yetkilendirmeler dosyası olarak ayarlayarak emin olun.
iOS Evrensel Bağlantılarını kullanmak için:
- Uygulamanıza, uygulamanıza destek olacak tüm etki alanları da dahil olmak üzere anahtarıyla bir İlişkili
applinksEtki Alanları yetkilendirmesi ekleyin. - Web sitenize bir Apple App Site Association dosyası ekleyin.
- Anahtarı
applinksApple Uygulama Sitesi İlişkisi dosyasına ekleyin.
Daha fazla bilgi için bkz. Uygulamalara ve Web Sitelerine İnternet'de İçeriğinize Bağlantı Verme developer.apple.com.
Android
Android platformunda, uygulama dizini oluşturma ve derin bağlantı işlevini kullanmak için karşılanacak bir dizi önkoşul vardır:
- Uygulama sürümünün canlı yayında olması Google Play.
- Google'ın Geliştirici Konsolu'nun uygulamaya karşı bir yardımcı web sitesi kayıtlı olması gerekir. Uygulama bir web sitesiyle ilişkilendirilen URL'ler, hem web sitesi hem de uygulama için çalışacak şekilde dizine ednebilir. Bu dizin, Arama sonuçlarında da sunulmaktadır. Daha fazla bilgi için Google'ın web sitesinde Google Search'de Uygulama Dizini Oluşturma'ya bakın.
- Uygulamanıza sınıfında HTTP URL amaçlarını desteklemesi gerekir ve bu da uygulamanın hangi TÜR URL veri düzenlerine yanıt vere bir uygulama
MainActivitydizini oluşturması gerektiğini söyler. Daha fazla bilgi için bkz. Amaç Filtresini Yapılandırma.
Bu önkoşullar karşı ardından, Android platformunda uygulama dizini oluşturma ve derin bağlamayı kullanmak için Xamarin.Forms aşağıdaki ek kurulum gereklidir:
- Xamarin.Forms'ı yükleyin. AppLinks/" data-linktype="external">. Xamarin.Forms AppLinks NuGet Android uygulama projesine içerir.
- MainActivity.cs dosyasında, ad alanını kullanmak için bir bildirim ekleyin.
- MainActivity.cs dosyasında, ad alanını kullanmak için bir bildirim ekleyin.
- Bir web tarayıcısında Firebase Konsolu aracılığıyla yeni bir proje oluşturun.
- Firebase Konsolu'nu kullanarak Firebase'i Android uygulamanıza ekleyin ve gerekli verileri girin.
- Sonuçta elde edilen google-services.json dosyasını indirin.
- google-services.json dosyasını Android projesinin kök dizinine ekleyin ve Derleme Eylemini GoogleServicesJson olarak ayarlayın.
- Geçersiz
MainActivity.OnCreatekılmada altına aşağıdaki kod satırıForms.Init(this, bundle)ekleyin:
FirebaseApp.InitializeApp(this);
AndroidAppLinks.Init(this);
projeye google-services.json eklenmiştir (ve GoogleServicesJson* derleme eylemi ayarlanmışsa), derleme işlemi istemci kimliğini ve API anahtarını ayıklar ve ardından bu kimlik bilgilerini oluşturulan bildirim dosyasına ekler.
Not
Bu makalede, uygulama bağlantıları ve derin bağlantılar terimleri sıklıkla birbirinin yerine kullanılır. Ancak Android'de bu terimler farklı anlamlara sahiptir. Android'de derin bağlantı, kullanıcıların uygulamaya belirli bir etkinliği doğrudan girmelerini sağlayan bir amaç filtresidir. Bir derin bağlantıya tıklarken, kullanıcının URL'yi işlebilir birden çok uygulamalardan birini seçmesini sağlayan bir belirsizlik iletişim kutusu açabilirsiniz. Android uygulama bağlantısı, web sitenizin URL'sini temel alan ve web sitenize ait olduğu doğrulanmış bir derin bağlantıdır. Bir uygulama bağlantısına tıklarsanız, uygulama yüklüyse, bir belirsizlik iletişim kutusu açmadan uygulama açılır.
Daha fazla bilgi için Deep Link Content with Xamarin.Forms URL Navigation Xamarin bloguna bakın.
Sayfanın Dizinini Oluşturma
Bir sayfayı dizine ekleme ve Google ile Spotlight aramalarına açıklama işlemi aşağıdaki gibidir:
- Kullanıcı arama sonuçlarında dizine ekli içeriği seçerken sayfaya geri dönmek için derin bir bağlantıyla birlikte sayfayı dizine almak için gereken meta verileri
AppLinkEntryiçeren bir oluşturun. - Arama için
AppLinkEntrydizine kaydetmek için örneği kaydetme.
Aşağıdaki kod örneğinde örnek oluşturma adımları yer AppLinkEntry almaktadır:
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;
}
Örnek, AppLinkEntry sayfayı dizine oluşturmak ve bir derin bağlantı oluşturmak için değerleri gereken bir dizi özellik içerir. Xamarin_Forms _IAppLinkEntry_Title" data-linktype="absolute-path">Title , Xamarin_Forms Title _IAppLinkEntry_Description" data-linktype="absolute-path">Description , ve Xamarin_Forms _IAppLinkEntry_Thumbnail" data-linktype="absolute-path">Thumbnail özellikleri, arama sonuçlarında göründüğünde dizine sahip içeriği tanımlamak için kullanılır. Aşağıdaki Xamarin_Forms _IAppLinkEntry_IsLinkActive" data-linktype="absolute-path">özelliği, dizine belirtilmiş içeriğin şu anda görüntülmektedir olduğunu belirtmek IsLinkActive için olarak true ayarlanır. Xamarin_Forms _IAppLinkEntry_AppLinkUri" data-linktype="absolute-path">özelliği, geçerli sayfaya dönmek ve geçerli 'i görüntülemek için gereken bilgileri içeren AppLinkUriUri bir TodoItem özelliğidir. Aşağıdaki örnek, örnek Uri uygulamanın bir örneğini gösterir:
http://deeplinking/DeepLinking.TodoItemPage?id=2
Bu, Uri uygulamayı başlatmak için gereken tüm bilgileri deeplinking içerir, uygulamasına gidin ve 2 olan DeepLinking.TodoItemPage bilgilerini TodoItemID görüntüler.
Dizin Oluşturma için İçerik Kaydetme
Bir AppLinkEntry örnek oluşturulduktan sonra dizin oluşturmanın arama sonuçlarında görünmesi için kayıtlı olması gerekir. Bu, aşağıdaki kod örneğinde Xamarin_Forms _IAppLinks_RegisterLink_ Xamarin_Forms _IAppLinkEntry_" data-linktype="absolute-path">yöntemiyle RegisterLink işler:
Application.Current.AppLinks.RegisterLink (appLink);
Bu, AppLinkEntry örneği uygulamanın Xamarin_Forms AppLinkEntry _Application_AppLinks" data-linktype="absolute-path">AppLinks koleksiyonuna ekler.
Not
yöntemi, RegisterLink bir sayfa için dizine alan içeriği güncelleştirmek için de kullanılabilir.
Dizin AppLinkEntry oluşturma için bir örnek kaydedildiktan sonra arama sonuçlarında görünebilir. Aşağıdaki ekran görüntüsünde iOS platformunda arama sonuçlarında görünen dizine oluşturulan içerikler yer alıyor:

Dizine Kayıtlı İçeriğin Kaydını Geri Kaydetme
Aşağıdaki kod örneğinde Xamarin_Forms _IAppLinks_DeregisterLink_ Xamarin_Forms _IAppLinkEntry_" data-linktype="absolute-path">yöntemi, arama sonuçlarından dizine sahip içeriği kaldırmak için DeregisterLink kullanılır:
Application.Current.AppLinks.DeregisterLink (appLink);
Bu, AppLinkEntry örneği uygulamanın Xamarin_Forms AppLinkEntry _Application_AppLinks" data-linktype="absolute-path">AppLinks kaldırır.
Not
Android'de dizine ekli içeriği arama sonuçlarından kaldırmak mümkün değildir.
Derin Bağlantıya Yanıt Verme
Dizinli içerik arama sonuçlarında görüntülendiğinde ve bir kullanıcı tarafından seçildiğinde, uygulamanın sınıfı dizinli içerikte yer alan içeriği işlemek için AppUri bir istek alır. Bu istek, aşağıdaki kod örneğinde Xamarin_Forms _Application_OnAppLinkRequestReceived_System_Uri_" data-linktype="absolute-path">geçersiz kılmada OnAppLinkRequestReceived işlenebilir:
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="absolute-path">yöntemi, gidilen sayfaya ayrıştırmadan önce uygulama için alınan değerin ve sayfaya geçirilen parametrenin amacını OnAppLinkRequestReceivedUriUri denetler. Gidilen sayfanın bir örneği oluşturulur ve sayfa TodoItem parametresiyle temsil edilen değeri alınır. Sayfanın Xamarin_Forms _BindableObject_BindingContext" data-linktype="absolute-path">" olarak BindingContextTodoItem ayarlanır. Bu, Xamarin_Forms TodoItemPageTodoItemPage _INavigation_PushAsync_ Xamarin_Forms _Page_" data-linktype="absolute-path">yöntemi tarafından görüntülendiğinde, öğesinin derin bağlantıda yer alan öğesini PushAsyncTodoItemID göstermelerini sağlar.
İçeriği Arama Dizini Oluşturma için Kullanılabilir Yapma
Bir derin bağlantıyla gösterilen sayfa her görüntülendiğinde, Xamarin_Forms _IAppLinkEntry_IsLinkActive" data-linktype="absolute-path">AppLinkEntry.IsLinkActive özelliği olarak true ayarlanır. iOS ve Android'de bu, örneği arama dizini oluşturma için kullanılabilir yapar ve yalnızca iOS'ta örneği De AppLinkEntryAppLinkEntry İlerlerken kullanılabilir yapar. Teslim hakkında daha fazla bilgi için bkz. Teslime Giriş.
Aşağıdaki kod örneği, Xamarin_Forms _IAppLinkEntry_IsLinkActive" data-linktype="absolute-path">AppLinkEntry.IsLinkActivetrue özelliğinin Xamarin_Forms AppLinkEntry.IsLinkActive _Page_OnAppearing" data-linktype="absolute-path">Page.OnAppearing geçersiz kılmada olarak ayar >gösterir:
protected override void OnAppearing()
{
appLink = GetAppLink(BindingContext as TodoItem);
if (appLink != null)
{
appLink.IsLinkActive = true;
}
}
Benzer şekilde, bir derin bağlantıyla temsil edilen sayfa'dan uzak bir şekilde gezinilen Xamarin_Forms _IAppLinkEntry_IsLinkActive" data-linktype="absolute-path">AppLinkEntry.IsLinkActive özelliği olarak ayarlanmaz. false iOS ve Android'de bu, örneğin arama dizini oluşturma için tanıtını durdurur ve yalnızca iOS'ta örneği İlerler'e yönelik olarak AppLinkEntryAppLinkEntry tanıtmaz. Bu, aşağıdaki kod örneğinde Xamarin_Forms _Page_OnDisappearing" data-linktype="absolute-path">geçersiz kılmada Page.OnDisappearing gerçek olabilir:
protected override void OnDisappearing()
{
if (appLink != null)
{
appLink.IsLinkActive = false;
}
}
Verileri Teslime Sağlama
iOS'ta, sayfa dizine kaydedilirken uygulamaya özgü veriler depolanmış olabilir. Bu, Xamarin_Forms _IAppLinkEntry_KeyValues" data-linktype="absolute-path">koleksiyonuna veri ekleyerek elde edilir. Bu koleksiyon, İlerlerken kullanılan KeyValues anahtar-değer çiftlerini depolamak Dictionary<string, string> için kullanılır. İlerler, kullanıcının cihazlarından biri üzerinde etkinlik başlatması ve bu etkinliği diğer cihazlarında (kullanıcının iCloud hesabıyla tanımlandı) devam ettiği bir yoldur. Aşağıdaki kod, uygulamaya özgü anahtar-değer çiftlerini depolama örneğini gösterir:
var pageLink = new AppLinkEntry
{
...
};
pageLink.KeyValues.Add("appName", App.AppName);
pageLink.KeyValues.Add("companyName", "Xamarin");
Xamarin_Forms _IAppLinkEntry_KeyValues" data-linktype="absolute-path">koleksiyonu dizinli sayfanın meta verilerinde depolanır ve kullanıcı derin bağlantı içeren bir arama sonucuna dokunarak geri yüklenir (veya içeriği başka bir oturum açık cihazda görüntülemek için KeyValues Handoff kullanılır).
Ayrıca, aşağıdaki anahtarlar için değerler belirtilebilir:
contentType–stringDizine alan içeriğin tekdüz tür tanımlayıcısını belirten bir. Bu değer için kullanılması önerilen kural, dizinli içeriği içeren sayfanın tür adıdır.associatedWebPage– Dizine alınan içerik web'de de görüntülenese ziyaret etmek için web sayfasını temsil eden veyastringuygulama Safari'nin derin bağlantılarını destekliyorsa.shouldAddToPublicIndex–stringtrueveya,falsedizinlenmiş içeriğin Apple 'ın genel bulut dizinine eklenip eklenmeyeceğini denetler ve bu, uygulamayı iOS cihazlarına yüklememiş kullanıcılara sunulabilir. Ancak, içerik ortak dizin oluşturma için ayarlandığı için, Apple 'ın genel bulut dizinine otomatik olarak eklenebileceği anlamına gelmez. Daha fazla bilgi için bkz. genel arama dizin oluşturma. Bu anahtarınfalse, kişisel verileri Xamarin_Forms eklendiğinde,false"Data-LinkType =" Absolute-path ">koleksiyonuna _IAppLinkEntry_KeyValues içinKeyValuesayarlanmış olması gerektiğini unutmayın .
Not
KeyValuesKoleksiyon, Android platformunda kullanılmıyor.
Iletim hakkında daha fazla bilgi için bkz. iletime giriş.
Örneği indirme