Uygulama Dizini Oluşturma ve Ayrıntılı Bağlantı Sağlama
Xamarin.Forms uygulama dizin oluşturma ve ayrıntılı bağlama, kullanıcılar uygulamalarda gezinirken uygulama dizin oluşturma için meta verileri yayımlamaya yönelik bir API sağlar. Dizine alınan içerik daha sonra Spotlight Search'te, Google Search'te veya bir web aramasında aranabilir. Derin bağlantı içeren bir arama sonucuna dokunulduğunda, bir uygulama tarafından işlenebilen bir olay tetiklenir ve genellikle derin bağlantıdan başvuruda bulunulmuş 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 Yapılacaklar listesi uygulamasını gösterir:
Kullanıcı tarafından oluşturulan her TodoItem
örnek dizine eklenir. Ardından platforma özgü arama, uygulamadan dizine alınan verileri bulmak için kullanılabilir. Kullanıcı uygulama için bir arama sonucu öğesine dokunduğunda, uygulama başlatılır, TodoItemPage
öğesine gider ve TodoItem
ayrıntılı bağlantıdan başvuruda bulunan görüntülenir.
SQLite veritabanı kullanma hakkında daha fazla bilgi için bkz Xamarin.Forms . Yerel Veritabanları.
Not
Xamarin.Forms uygulama dizin oluşturma ve derin bağlama işlevleri yalnızca iOS ve Android platformlarında kullanılabilir ve sırasıyla en az iOS 9 ve API 23 gerektirir.
Ayarlama
Aşağıdaki bölümlerde, iOS ve Android platformlarında bu özelliği kullanmaya yönelik ek kurulum yönergeleri sağlanır.
iOS
iOS platformunda, iOS platform projenizin Entitlements.plist dosyasını paketi imzalamak için özel yetkilendirmeler dosyası olarak belirlediğinden emin olun.
iOS Evrensel Bağlantılarını kullanmak için:
- Uygulamanızın destekleyeceğini tüm etki alanları da dahil olmak üzere anahtarla
applinks
uygulamanıza bir İlişkili Etki Alanları yetkilendirmesi ekleyin. - Web sitenize bir Apple Uygulama Sitesi İlişkilendirme dosyası ekleyin.
applinks
Anahtarı Apple Uygulama Sitesi İlişkilendirme dosyasına ekleyin.
Daha fazla bilgi için bkz . developer.apple.com'da Uygulamaların ve Web Sitelerinin İçeriğinize Bağlanmasına İzin Verme.
Android
Android platformunda, uygulama dizin oluşturma ve derin bağlama işlevselliğini kullanmak için karşılanması gereken bir dizi önkoşul vardır:
- Uygulamanızın bir sürümü Google Play'de canlı olmalıdır.
- Google'ın Geliştirici Konsolu'nda uygulama için bir yardımcı web sitesi kayıtlı olmalıdır. Uygulama bir web sitesiyle ilişkilendirildikten sonra, hem web sitesi hem de uygulama için çalışan URL'ler dizine eklenebilir ve daha sonra Arama sonuçlarında sunulabilir. Daha fazla bilgi için bkz . Google'ın web sitesindeki Google Search'te Uygulama Dizini Oluşturma.
- Uygulamanızın sınıfındaki
MainActivity
HTTP URL amaçlarını desteklemesi gerekir. Bu amaç, uygulamanın hangi tür URL veri düzenlerine yanıt verebileceğini dizine almasını söyler. Daha fazla bilgi için bkz . Amaç Filtresini Yapılandırma.
Bu önkoşullar karşılandığında, Android platformunda uygulama dizin oluşturma ve derin bağlamayı kullanmak Xamarin.Forms için aşağıdaki ek kurulum gerekir:
- öğesini Xamarin.Formsyükleyin. AppLinks NuGet paketini Android uygulama projesine bağlar.
- MainActivity.cs dosyasında ad alanını kullanmak
Xamarin.Forms.Platform.Android.AppLinks
için bir bildirim ekleyin. - MainActivity.cs dosyasında ad alanını kullanmak
Firebase
için bir bildirim ekleyin. - Web tarayıcısında Firebase Konsolu aracılığıyla yeni bir proje oluşturun.
- Firebase Konsolu'nda 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 Eylemi'ni GoogleServicesJson olarak ayarlayın.
- Geçersiz kılmada
MainActivity.OnCreate
altına aşağıdaki kodForms.Init(this, bundle)
satırını ekleyin:
FirebaseApp.InitializeApp(this);
AndroidAppLinks.Init(this);
Projeye google-services.json eklendiğinde (ve GoogleServicesJson* derleme eylemi ayarlandığında), 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 genellikle birbirinin yerine kullanılır. Ancak Android'de bu terimlerin ayrı anlamları vardır. Android'de ayrıntılı bağlantı, kullanıcıların uygulamada belirli bir etkinliği doğrudan girmesini sağlayan bir amaç filtresidir. Derin bir bağlantıya tıklanması, kullanıcının URL'yi işleyebilen birden çok uygulamadan birini seçmesine olanak tanıyan bir kesinleştirme iletişim kutusu açabilir. Android uygulama bağlantısı, web sitenizin URL'sini temel alan ve web sitenize ait olduğu doğrulanmış derin bir bağlantıdır. Bir uygulama bağlantısına tıklanması, uygulamanızın yüklü olması durumunda kesinleştirme iletişim kutusunu açmadan açılır.
Daha fazla bilgi için Xamarin blogundaki URL Gezintisi ile Xamarin.Forms derin bağlantı içeriği bölümüne bakın.
Sayfa Dizini Oluşturma
Bir sayfayı dizine ekleme ve Google ve Spotlight aramasına ifşa etme işlemi aşağıdaki gibidir:
- Kullanıcı arama sonuçlarında dizine alınan içeriği seçtiğinde sayfaya dönmek için ayrıntılı bir bağlantının yanı sıra sayfayı dizine almak için gereken meta verileri içeren bir
AppLinkEntry
oluşturun. AppLinkEntry
Arama için dizini oluşturmak üzere örneği kaydedin.
Aşağıdaki kod örneğinde bir örneğin nasıl oluşturulacağı AppLinkEntry
gösterilmektedir:
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 almak ve derin bir bağlantı oluşturmak için değerleri gereken bir dizi özellik içerir. Title
, Description
ve Thumbnail
özellikleri, arama sonuçlarında göründüğünde dizine alınan içeriği tanımlamak için kullanılır. IsLinkActive
özelliği, dizine alınan içeriğin şu anda görüntülendiğini belirtmek için olarak ayarlanırtrue
. AppLinkUri
özelliği, geçerli sayfaya dönmek ve geçerli TodoItem
öğesini görüntülemek için gereken bilgileri içeren bir Uri
özelliğidir. Aşağıdaki örnekte örnek uygulama için bir örnek Uri
gösterilmektedir:
http://deeplinking/DeepLinking.TodoItemPage?id=2
Bu Uri
, uygulamayı başlatmak deeplinking
, öğesine gitmek DeepLinking.TodoItemPage
ve 2 içeren öğesini TodoItem
ID
görüntülemek için gereken tüm bilgileri içerir.
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 kaydedilmesi gerekir. Bu, aşağıdaki kod örneğinde gösterildiği gibi yöntemiyle RegisterLink
gerçekleştirilir:
Application.Current.AppLinks.RegisterLink (appLink);
Bu, AppLinkEntry
örneği uygulamanın AppLinks
koleksiyonuna ekler.
Not
yöntemi, RegisterLink
bir sayfa için dizine alınmış içeriği güncelleştirmek için de kullanılabilir.
Bir AppLinkEntry
örnek dizin oluşturma için kaydedildikten sonra arama sonuçlarında görünebilir. Aşağıdaki ekran görüntüsünde iOS platformundaki arama sonuçlarında gösterilen dizinlenmiş içerik gösterilmektedir:
Dizine Alınan İçeriğin Kaydını Kaldırma
yöntemi DeregisterLink
, aşağıdaki kod örneğinde gösterildiği gibi arama sonuçlarından dizine alınmış içeriği kaldırmak için kullanılır:
Application.Current.AppLinks.DeregisterLink (appLink);
Bu, AppLinkEntry
örneği uygulamanın AppLinks
koleksiyonundan kaldırır.
Not
Android'de dizine alınan içeriği arama sonuçlarından kaldırmak mümkün değildir.
Derin Bağlantıya Yanıt Verme
Dizine alınan içerik arama sonuçlarında görüntülendiğinde ve bir kullanıcı tarafından seçildiğinde, App
uygulamanın sınıfı dizine alınan içerikte yer alan içeriği işlemek Uri
için bir istek alır. Bu istek, aşağıdaki kod örneğinde OnAppLinkRequestReceived
gösterildiği gibi geçersiz kılmada 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);
}
}
OnAppLinkRequestReceived
yöntemi, alınan Uri
öğesinin gidilecek sayfaya ve sayfaya geçirilecek parametreye ayrıştırmadan Uri
önce uygulamaya yönelik olup olmadığını denetler. Gidilecek sayfanın bir örneği oluşturulur ve TodoItem
sayfa parametresi tarafından temsil edilen alınır. Gidilecek BindingContext
sayfanın konumuna ayarlanır TodoItem
. Bu, yöntemi tarafından PushAsync
görüntülendiğindeTodoItemPage
, derin bağlantıda bulunan öğesinin ID
gösterilmesini TodoItem
sağlar.
İçeriği Arama Dizini Oluşturma için Kullanılabilir Hale Getirme
Ayrıntılı bağlantıyla gösterilen sayfa her görüntülendiğinde özelliği AppLinkEntry.IsLinkActive
olarak true
ayarlanabilir. iOS ve Android'de bu, örneği yalnızca iOS'ta arama dizini oluşturma için kullanılabilir hale getirir AppLinkEntry
ve ayrıca Handoff için de kullanılabilir hale getirir AppLinkEntry
. İletim hakkında daha fazla bilgi için bkz . İletim'e Giriş.
Aşağıdaki kod örneği, geçersiz kılmada özelliğinin AppLinkEntry.IsLinkActive
true
olarak ayarlanmasını Page.OnAppearing
gösterir:
protected override void OnAppearing()
{
appLink = GetAppLink(BindingContext as TodoItem);
if (appLink != null)
{
appLink.IsLinkActive = true;
}
}
Benzer şekilde, derin bir bağlantıyla temsil edilen sayfa'dan uzağa gidildiğinde, AppLinkEntry.IsLinkActive
özelliği olarak false
ayarlanabilir. iOS ve Android'de bu, örneğin arama dizini oluşturma için tanıtılmasını durdurur AppLinkEntry
ve yalnızca iOS'ta Handoff örneğinin reklamını AppLinkEntry
da durdurur. Bu, aşağıdaki kod örneğinde Page.OnDisappearing
gösterildiği gibi geçersiz kılmada gerçekleştirilebilir:
protected override void OnDisappearing()
{
if (appLink != null)
{
appLink.IsLinkActive = false;
}
}
Teslime Veri Sağlama
iOS'ta, sayfa dizine kaydedilirken uygulamaya özgü veriler depolanabilir. Bu, teslimde kullanılan anahtar-değer çiftlerini depolamak KeyValues
için kullanılan Dictionary<string, string>
koleksiyona veri eklenerek elde edilir. İletim, kullanıcının cihazlarından birinde bir etkinlik başlatması ve bu etkinliğe başka bir cihazda (kullanıcının iCloud hesabı tarafından tanımlandığında) devam etmesi için 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");
Koleksiyonda KeyValues
depolanan değerler dizine alınan sayfanın meta verilerinde depolanır ve kullanıcı derin bir bağlantı içeren bir arama sonucuna dokunduğunda (veya başka bir oturum açmış cihazda içeriği görüntülemek için İletim kullanıldığında) geri yüklenir.
Ayrıca, aşağıdaki anahtarlar için değerler belirtilebilir:
contentType
string
– dizine alınan içeriğin tekdüzen tür tanımlayıcısını belirten a. Bu değer için kullanılması önerilen kural, dizine alınan içeriği içeren sayfanın tür adıdır.associatedWebPage
string
– dizine alınan içerik web'de de görüntülenebiliyorsa veya uygulama Safari'nin derin bağlantılarını destekliyorsa ziyaret edilecek web sayfasını temsil eden bir.shouldAddToPublicIndex
– dizine alınan içeriğin Apple'ın genel bulut dizinine eklenip eklenmeyeceğini denetleyen veya bu dizinlerden biristring
true
false
, uygulamayı iOS cihazına yüklememiş kullanıcılara sunulabilir. Ancak, içeriğin genel dizin oluşturma için ayarlanmış olması, apple'ın genel bulut dizinine otomatik olarak eklendiği anlamına gelmez. Daha fazla bilgi için bkz . Genel Arama Dizini Oluşturma. Koleksiyona kişisel veriler eklenirken bu anahtarınKeyValues
olarak ayarlanmasıfalse
gerektiğini unutmayın.
Not
KeyValues
Koleksiyon Android platformunda kullanılmaz.
İletim hakkında daha fazla bilgi için bkz . İletim'e Giriş.