Share via


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:

TodoList Uygulaması

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:

  1. Uygulamanızın destekleyeceğini tüm etki alanları da dahil olmak üzere anahtarla applinks uygulamanıza bir İlişkili Etki Alanları yetkilendirmesi ekleyin.
  2. Web sitenize bir Apple Uygulama Sitesi İlişkilendirme dosyası ekleyin.
  3. 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:

  1. Uygulamanızın bir sürümü Google Play'de canlı olmalıdır.
  2. 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.
  3. 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:

  1. öğesini Xamarin.Formsyükleyin. AppLinks NuGet paketini Android uygulama projesine bağlar.
  2. MainActivity.cs dosyasında ad alanını kullanmak Xamarin.Forms.Platform.Android.AppLinks için bir bildirim ekleyin.
  3. MainActivity.cs dosyasında ad alanını kullanmak Firebase için bir bildirim ekleyin.
  4. Web tarayıcısında Firebase Konsolu aracılığıyla yeni bir proje oluşturun.
  5. Firebase Konsolu'nda Firebase'i Android uygulamanıza ekleyin ve gerekli verileri girin.
  6. Sonuçta elde edilen google-services.json dosyasını indirin.
  7. google-services.json dosyasını Android projesinin kök dizinine ekleyin ve Derleme Eylemi'ni GoogleServicesJson olarak ayarlayın.
  8. Geçersiz kılmada MainActivity.OnCreate altına aşağıdaki kod Forms.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:

  1. 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.
  2. 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, Descriptionve 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.TodoItemPageve 2 içeren öğesini TodoItemID 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:

iOS'ta Arama Sonuçlarında Dizine Alınan İçerik

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.

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 trueayarlanabilir. 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.IsLinkActivetrue 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 falseayarlanabilir. 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:

  • contentTypestring– 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.
  • associatedWebPagestring– 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 biri stringtruefalse , 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ın KeyValues 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ş.