Aracılığıyla paylaş


Android'de Uygulama Bağlama

Bu kılavuzda Android 6.0'ın mobil uygulamaların web sitelerinde URL'lere yanıt vermesini sağlayan bir teknik olan uygulama bağlamayı nasıl desteklediği açıklanmaktadır. Uygulama bağlamanın ne olduğu, Android 6.0 uygulamasında uygulama bağlamanın nasıl uygulanacağı ve bir web sitesinin bir etki alanı için mobil uygulamaya izin verecek şekilde nasıl yapılandırılacağı açıklanır.

Uygulama Bağlamaya Genel Bakış

Mobil uygulamalar artık bir siloda yaşamıyor - çoğu durumda, web siteleriyle birlikte işlerinin önemli bir bileşenidir. İşletmelerin web varlıklarını ve mobil uygulamalarını, mobil uygulamaları başlatan ve ilgili içeriği mobil uygulamada görüntüleyen bir web sitesindeki bağlantılarla sorunsuz bir şekilde birbirine bağlaması tercih edilir. Uygulama bağlama (derin bağlantı olarak da adlandırılır) bir mobil cihazın URI'ye yanıt vermesini ve bu URI'ye karşılık gelen bir mobil uygulamayı başlatmasını sağlayan bir tekniktir.

Android, amaç sistemi aracılığıyla uygulama bağlamayı işler. Kullanıcı mobil tarayıcıdaki bir bağlantıya tıkladığında, mobil tarayıcı Android'in kayıtlı bir uygulamaya temsilci olarak göndereceği bir amaç gönderecektir. Örneğin, yemek pişirme web sitesindeki bir bağlantıya tıklandığında söz konusu web sitesiyle ilişkili bir mobil uygulama açılır ve kullanıcıya belirli bir tarif görüntülenir. Bu amacı işlemek için kayıtlı birden fazla uygulama varsa Android, kullanıcıya amacı işlemesi gereken uygulamayı seçmesini isteyecek bir kesinleştirme iletişim kutusu oluşturur, örneğin:

Example screenshot of a disambiguation dialog

Android 6.0, otomatik bağlantı işlemeyi kullanarak bunu geliştirir. Android'in bir uygulamayı URI için varsayılan işleyici olarak otomatik olarak kaydetmesi mümkündür; uygulama otomatik olarak başlatılır ve doğrudan ilgili Etkinliğe gider. Android 6.0'ın URI tıklamasını işlemeye nasıl karar vereceğiniz aşağıdaki ölçütlere bağlıdır:

  1. Mevcut bir uygulama zaten URI ile ilişkilendirilmiş– Kullanıcı mevcut bir uygulamayı zaten bir URI ile ilişkilendirmiş olabilir. Bu durumda Android bu uygulamayı kullanmaya devam edecektir.
  2. URI ile ilişkilendirilmiş mevcut bir uygulama yok, ancak bir destekleyici uygulama yüklü – Bu senaryoda kullanıcı mevcut bir uygulamayı belirtmediğinden Android, isteği işlemek için yüklü destekleyici uygulamayı kullanır.
  3. URI ile ilişkilendirilmiş mevcut bir uygulama yok, ancak birçok destekleyici uygulama yüklü – URI'yi destekleyen birden çok uygulama olduğundan, kesinleştirme iletişim kutusu görüntülenir ve kullanıcının URI'yi işleyecek uygulamayı seçmesi gerekir.

Kullanıcının URI'yi destekleyen bir uygulaması yüklü değilse ve bir uygulama daha sonra yüklendiyse, Android, URI ile ilişkilendirilmiş web sitesiyle ilişkilendirmeyi doğruladıktan sonra bu uygulamayı URI için varsayılan işleyici olarak ayarlar.

Bu kılavuzda bir Android 6.0 uygulamasının nasıl yapılandırılacağı ve Android 6.0'da uygulama bağlamayı desteklemek için Dijital Varlık Bağlantıları dosyasının nasıl oluşturulacağı ve yayımlanacağı açıklanır.

Gereksinimler

Bu kılavuz, Xamarin.Android 6.1 ve Android 6.0 (API düzeyi 23) veya üzerini hedefleyen bir uygulama gerektirir.

Xamarin Bileşen deposundaki Rivets NuGet paketini kullanarak Android'in önceki sürümlerinde uygulama bağlama mümkündür. Rivets paketi Android 6.0'da uygulama bağlama ile uyumlu değildir; Android 6.0 uygulamasını bağlamayı desteklemez.

Android 6.0'da Uygulama Bağlamayı Yapılandırma

Android 6.0'da uygulama bağlantılarının ayarlanması iki ana adımı içerir:

  1. Web sitesi URI'leri için bir veya daha fazla amaç filtresi ekleme– amaç filtreleri, Android'e mobil tarayıcıda URL tıklamasını işleme konusunda kılavuzluk eder.
  2. Web sitesinde Dijital Varlık Bağlantıları JSON dosyası yayımlama – bu, bir web sitesine yüklenen ve Android tarafından mobil uygulama ile web sitesinin etki alanı arasındaki ilişkiyi doğrulamak için kullanılan bir dosyadır. Bu olmadan Android, uygulamayı URI'ler için varsayılan tanıtıcı olarak yükleyemez; kullanıcının bunu el ile yapması gerekir.

Amaç Filtresini Yapılandırma

Bir web sitesindeki URI'leri (veya olası bir URI'leri) Android uygulamasındaki bir Etkinlikle eşleyen bir amaç filtresi yapılandırmak gerekir. Xamarin.Android'de bu ilişki IntentFilterAttribute ile bir Etkinlik donatılarak kurulur. Amaç filtresi aşağıdaki bilgileri bildirmelidir:

  • Intent.ActionView – Bu, bilgileri görüntüleme isteklerine yanıt vermek için amaç filtresini kaydeder
  • Categories– Amaç filtresi, web URI'sini düzgün işleyebilmek için intent.CategoryBrowsable ve Intent.CategoryDefault değerlerini kaydetmelidir.
  • DataScheme– Amaç filtresi ve/veya httpsbildirmelidirhttp. Bunlar yalnızca iki geçerli düzendir.
  • DataHost – Bu, URI'lerin kaynaklanacağı etki alanıdır.
  • DataPathPrefix – Bu, web sitesindeki kaynaklara yönelik isteğe bağlı bir yoldur.
  • AutoVerify – Özniteliği Android'e autoVerify uygulama ile web sitesi arasındaki ilişkiyi doğrulamasını söyler. Bu konu aşağıda daha ayrıntılı olarak ele alınacaktır.

Aşağıdaki örnekte, öğesinden ve öğesinden https://www.recipe-app.com/recipeshttp://www.recipe-app.com/recipesbağlantıları işlemek için IntentFilterAttribute'un nasıl kullanılacağı gösterilmektedir:

[IntentFilter(new [] { Intent.ActionView },
              Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault },
              DataScheme = "http",
              DataHost = "recipe-app.com",
              DataPathPrefix = "/recipe",
              AutoVerify=true)]
public class RecipeActivity : Activity
{
    // Code for the activity omitted
}

Android, uygulamayı bir URI için varsayılan işleyici olarak kaydetmeden önce amaç filtreleri tarafından tanımlanan her konağı web sitesindeki Dijital Varlıklar Dosyasına göre doğrular. Android'in uygulamayı varsayılan işleyici olarak oluşturabilmesi için önce tüm amaç filtrelerinin doğrulamayı geçirmesi gerekir.

Android 6.0 uygulama bağlama, Android'in uygulamayı URI için varsayılan işleyici olarak ayarlamadan önce uygulama ile web sitesi arasındaki ilişkiyi doğrulamasını gerektirir. Bu doğrulama, uygulama ilk yüklendiğinde gerçekleşir. Dijital Varlıklar Bağlantıları dosyası, ilgili web etki alanları tarafından barındırılan bir JSON dosyasıdır.

Not

Özniteliğin android:autoVerify amaç filtresi tarafından ayarlanması gerekir; aksi takdirde Android doğrulamayı gerçekleştirmez.

Dosya, konumundaki https://domain/.well-known/assetlinks.jsonetki alanının web yöneticisi tarafından yerleştirilir.

Dijital Varlık Dosyası, Android'in ilişkilendirmeyi doğrulaması için gereken meta verileri içerir. assetlinks.json dosyasında aşağıdaki anahtar-değer çiftleri bulunur:

  • namespace – Android uygulamasının ad alanı.
  • package_name – Android uygulamasının paket adı (uygulama bildiriminde bildirilmektedir).
  • sha256_cert_fingerprints – imzalanan uygulamanın SHA256 parmak izleri. Bir uygulamanın SHA256 parmak izini alma hakkında daha fazla bilgi için lütfen Keystore'nuzun İmzasını Bulma kılavuzuna bakın.

Aşağıdaki kod parçacığı, tek bir uygulamanın listelendiği bir assetlinks.json örneğidir:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "com.example",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Uygulamanızın farklı sürümlerini veya derlemelerini desteklemek için birden fazla SHA256 parmak izi kaydetmek mümkündür. Bu sonraki assetlinks.json dosyası, birden çok uygulamayı kaydetme örneğidir:

[
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.puppies.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   },
   {
      "relation": [
         "delegate_permission/common.handle_all_urls"
      ],
      "target": {
         "namespace": "android_app",
         "package_name": "example.com.monkeys.app",
         "sha256_cert_fingerprints": [
            "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"
         ]
      }
   }
]

Google Dijital Varlık Bağlantıları web sitesinde, Dijital Varlıklar dosyasını oluşturma ve test etme konusunda yardımcı olabilecek çevrimiçi bir araç vardır.

Uygulama bağlantıları uygulandıktan sonra, beklendiği gibi çalıştığından emin olmak için çeşitli parçaların test edilmesi gerekir.

Dijital Varlıklar dosyasının, bu örnekte gösterildiği gibi Google'ın Dijital Varlık Bağlantıları API'sini kullanarak düzgün biçimlendirildiğini ve barındırıldığını onaylamak mümkündür:

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=
  https://<WEB SITE ADDRESS>:&relation=delegate_permission/common.handle_all_urls

Amaç filtrelerinin düzgün yapılandırıldığından ve uygulamanın bir URI için varsayılan işleyici olarak ayarlandığından emin olmak için gerçekleştirilebilecek iki test vardır:

  1. Dijital Varlık Dosyası, yukarıda açıklandığı gibi düzgün bir şekilde barındırılır. İlk test, Android'in mobil uygulamaya yeniden yönlendirmesi gereken bir amaç gönderecektir. Android uygulaması başlatılmalı ve URL için kaydedilen Etkinliği görüntülemelidir. Komut istemine şunu yazın:

    $ adb shell am start -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "http://<domain1>/recipe/scalloped-potato"
    
  2. Belirli bir cihaza yüklenen uygulamalar için mevcut bağlantı işleme ilkelerini görüntüleyin. Aşağıdaki komut, cihazdaki her kullanıcı için aşağıdaki bilgileri içeren bağlantı ilkelerinin listesini döküm eder. Komut isteminde aşağıdaki komutu yazın:

    $ adb shell dumpsys package domain-preferred-apps
    
    • Package – Uygulamanın paket adı.
    • Domain – Web bağlantıları uygulama tarafından işlenecek etki alanları (boşluklarla ayrılmış)
    • Status – Bu, uygulamanın geçerli bağlantı işleme durumudur. değeri her zaman uygulamanın bildirdiği android:autoVerify=true ve sistem doğrulamasını geçtiği anlamına gelir. Ardından Android sisteminin tercih kaydını temsil eden onaltılık bir sayı geliyor.

    Örneğin:

    $ adb shell dumpsys package domain-preferred-apps
    
    App linkages for user 0:
    Package: com.android.vending
    Domains: play.google.com market.android.com
    Status: always : 200000002
    

Özet

Bu kılavuzda, Android 6.0'da uygulama bağlamanın nasıl çalıştığı açıklanmaktadır. Daha sonra bir Android 6.0 uygulamasını uygulama bağlantılarını destekleyecek ve yanıt verecek şekilde yapılandırmayı ele alınmıştır. Ayrıca bir Android uygulamasında uygulama bağlamayı test etme konusu da ele alınmıştı.