Uygulama İçeriğine Derin Bağlantılar Oluşturma

Tıklanan bir bağlantı veya programatik istek bir web URI amacını çağırdığında, Android sistemi istek başarılı olana kadar aşağıdaki işlemlerin her birini sıralı olarak dener:

  1. Kullanıcının tercih ettiği ve URI'yi işleyebilecek uygulamayı (belirlenmişse) açın.
  2. URI'yi işleyebilecek tek uygulamayı açın.
  3. Kullanıcının iletişim kutusundan uygulama seçmesine izin ver.

İçeriğinize bağlantılar oluşturmak ve test etmek için aşağıdaki adımları uygulayın. Ayrıca şunu da kullanabilirsiniz: Eklemek için Android Studio'da Uygulama Bağlantıları Asistanı Android App Links.

Not: Android 12'den (API düzeyi 31) itibaren, genel bir web intent'i yalnızca uygulamanız söz konusu web intent'inde yer alan belirli bir alan için onaylanmışsa uygulamanızdaki bir etkinliğe çözümlenir. Uygulamanız alan için onaylanmamışsa web intent'i kullanıcının varsayılan tarayıcı uygulamasına yönlendirilir.

Gelen bağlantılar için intent filtreleri ekleme

Uygulama içeriğinize bağlantı oluşturmak için uygulamanızın içeriğine yönlendiren bir intent filtresi manifestinizde şu öğeleri ve özellik değerlerini içerir:

<action>
ACTION_VIEW intent işlemini şu şekilde belirtin: Google Arama'dan ulaşılabilmesini sağladık.
<data>
Bir veya daha fazla <data> ekleyin etiketlerinin her biri, etkinliğe çözümlenen URI biçimini temsil eder. <data> etiketi en azından android:scheme özelliğini içermelidir.

Etkinliğin kabul ettiği URI türünü daha da hassaslaştırmak için daha fazla özellik ekleyebilirsiniz. Örneğin, Örneğin, benzer URI'leri kabul eden, ancak bunlar basitçe farklılık gösteren birden fazla etkinliğiniz olabilir seçebilirsiniz. Bu durumda, sistemin farklı URI yolları için hangi etkinliği açması gerektiğini belirlemek üzere android:path özelliğini veya pathPattern ya da pathPrefix varyantlarını kullanın.

<category>
BROWSABLE ekleyin seçin. Amaç filtresinin web'den erişilebilir olması için gereklidir emin olun. Bu olmadan, tarayıcıda bir bağlantı tıklandığında uygulamanız çözümlenemez.

DEFAULT kategorisini de ekleyin. Bu sayede uygulamanız, örtülü intent'lere yanıt verebilir. Bu olmadan etkinlik yalnızca intent'te uygulama bileşeninizin adı belirtilirse başlatılabilir.

Aşağıdaki XML snippet'inde, derin bağlantı için manifest'inizde nasıl intent filtresi belirtebileceğiniz gösterilmektedir. Hem “example://gizmos” hem de “http://www.example.com/gizmos” URI'leri bu etkinliğe yönlendirir.

<activity
    android:name="com.example.android.GizmosActivity"
    android:label="@string/title_gizmos" >
    <intent-filter android:label="@string/filter_view_http_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
        <data android:scheme="http"
              android:host="www.example.com"
              android:pathPrefix="/gizmos" />
        <!-- note that the leading "/" is required for pathPrefix-->
    </intent-filter>
    <intent-filter android:label="@string/filter_view_example_gizmos">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos” -->
        <data android:scheme="example"
              android:host="gizmos" />
    </intent-filter>
</activity>

İki intent filtresinin yalnızca <data> öğesine göre farklılık gösterdiğine dikkat edin. Aynı filtreye birden çok <data> öğesi eklemek mümkün olsa da, benzersiz bir URL'yi beyan etmek istediğinizde ayrı filtreler oluşturmanız (örneğin, scheme ve host öğelerinin belirli bir kombinasyonu) aynı intent filtresindeki birden çok <data> öğesi aslında birleştirilir tüm varyantları hesaba katmak için kullanır. Örneğin, aşağıdakileri göz önünde bulundurun:

<intent-filter>
  ...
  <data android:scheme="https" android:host="www.example.com" />
  <data android:scheme="app" android:host="open.my.app" />
</intent-filter>

Bu uzantı yalnızca https://www.example.com ve app://open.my.app. Ancak aslında bu ikisinin yanı sıra app://www.example.com ve https://open.my.app'ı da destekler.

Dikkat: Birden fazla etkinlik, aynı sonuca çözümlenen intent filtreleri içeriyorsa App Link'i doğruladıysanız hangi etkinliğin ve bağlantıyı işler.

Uygulama manifestinize etkinlik içeriği URI'leri içeren intent filtreleri ekledikten sonra Android, URI'leri eşleşen tüm Intent'leri çalışma zamanında uygulamanıza yönlendirebilir.

Intent filtrelerini tanımlama hakkında daha fazla bilgi edinmek için Diğer Uygulamaların Etkinliğinizi Başlatmasına İzin Verme başlıklı makaleyi inceleyin.

Gelen niyetlerden veri okuma

Sistem, intent filtresi aracılığıyla etkinliğinizi başlattıktan sonra oluşturmanız gereken öğeleri belirlemek için Intent tarafından sağlanan verileri kullanır. Gelen Intent ile ilişkili verileri ve işlemi almak için getData() ve getAction() yöntemlerini çağırın. Şunları yapabilirsiniz: bu yöntemleri etkinliğin yaşam döngüsü boyunca istediğiniz zaman çağırabilirsiniz, onCreate() veya onStart().

Aşağıda, bir Intent'ten nasıl veri alınacağını gösteren bir snippet verilmiştir:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)

    val action: String? = intent?.action
    val data: Uri? = intent?.data
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = getIntent();
    String action = intent.getAction();
    Uri data = intent.getData();
}

Kullanıcı deneyimini iyileştirmek için aşağıdaki en iyi uygulamaları izleyin:

  • Derin bağlantı, kullanıcıları doğrudan içeriğe götürmelidir. herhangi bir istem, ara sayfa veya giriş olmadan. Kullanıcıların Uygulamayı daha önce hiç açmamış olsalar bile uygulama içeriğini görebilirler. Sonrasında gerçekleştirilecek etkileşimlerde veya uygulamayı Launcher'dan açtıklarında kullanıcılara istem göndermekte bir sakınca yoktur.
  • Şu bölümde açıklanan tasarım yönergelerini uygulayın: Yedekle ve Yukarı Kaydırma Özelliğiyle Navigasyon Böylece, uygulamanız kullanıcıların sonraki adımlarda geriye dönük gezinme Uygulamanıza bir derin bağlantı üzerinden giriyorlar.

Derin bağlantılarınızı test etme

Android Hata Ayıklama aracını Amaç filtresinin doğrulanıp ayarlanmadığını test etmek için etkinlik yöneticisi (am) aracıyla bağlantı kurun Derin bağlantı için belirttiğiniz URI'lar doğru uygulama etkinliğine çözümlenir. Siz adb komutunu bir cihaza veya emülatöre karşı çalıştırabilir.

Adb ile intent filtresi URI'sini test etmek için genel söz dizimi şöyledir:

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d <URI> <PACKAGE>

Örneğin, aşağıdaki komut, belirtilen URI ile ilişkili bir hedef uygulama etkinliğini görüntülemeye çalışır.

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "example://gizmos" com.example.android

Yukarıda ayarladığınız manifest beyanı ve intent işleyici, uygulamanız ile web sitesi arasındaki bağlantıyı ve gelen bağlantılarla ne yapılacağını tanımlar. Ancak sistemin, uygulamanızı bir URI grubu için varsayılan işleyici olarak ele almasını sağlamak amacıyla sistemin bu bağlantıyı doğrulamasını da istemeniz gerekir. Bu doğrulamanın nasıl uygulanacağı sonraki derste açıklanmıştır.

Amaçlar ve uygulama bağlantıları hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: