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ı sırayla dener:

  1. Kullanıcının URI'yı işleyebilecek tercih ettiği uygulamayı (varsa) açın.
  2. URI'yı işleyebilen kullanılabilir 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. Android App Links'i eklemek için Android Studio'da App Links Assistant'ı da kullanabilirsiniz.

Not: Android 12'den (API düzeyi 31) itibaren, genel bir web niyeti, yalnızca uygulamanız söz konusu web amacındaki belirli alan için onaylanırsa uygulamanızdaki bir etkinliği çözümler. Uygulamanız alan adı için onaylanmazsa web intent'i bunun yerine kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.

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

Uygulama içeriğinize bağlantı oluşturmak için manifest dosyanıza aşağıdaki öğeleri ve özellik değerlerini içeren bir intent filtresi ekleyin:

<action>
Niyet filtresine Google Arama'dan ulaşılabilmesi için ACTION_VIEW intent işlemini belirtin.
<data>
Her biri, etkinliğe çözümlenen bir URI biçimini temsil eden bir veya daha fazla <data> etiketi ekleyin. <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, benzer URI'leri kabul eden ancak yol adına göre farklılık gösteren birden fazla etkinliğiniz olabilir. Bu durumda, sistemin farklı URI yolları için açması gereken etkinliği ayırt etmek amacıyla android:path özelliğini veya pathPattern ya da pathPrefix varyantlarını kullanın.

<category>
BROWSABLE kategorisini ekleyin. Amaç filtresinin bir web tarayıcısından erişilebilir olması için bu anahtar gereklidir. Bu olmadan, tarayıcıda bir bağlantının tıklanması uygulamanızı yönlendiremez.

DEFAULT kategorisini de dahil edin. Bu, uygulamanızın örtülü niyetlere yanıt vermesine olanak tanır. Bu olmadan, etkinlik yalnızca intent, uygulama bileşeni adınızı belirttiğinde başlatılabilir.

Aşağıdaki XML snippet'i, derin bağlantı için manifest dosyanızda intent filtresini nasıl belirtebileceğinizi gösterir. Hem “example://gizmos” hem de “http://www.example.com/gizmos” URI'ları bu etkinliğe çözümlenir.

<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, amacınız benzersiz URL'ler (scheme ve host öğelerinin belirli bir kombinasyonu gibi) tanımlamak olduğunda ayrı filtreler oluşturmanız önemlidir. Bunun nedeni, aynı intent filtresindeki birden çok <data> öğesinin gerçekte birleştirilmiş özelliklerinin tüm varyasyonlarını hesaba katacak şekilde birleştirilmesidir. Ö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>

Yalnızca https://www.example.com ve app://open.my.app destekleniyor gibi görünebilir. Ancak aslında bu ikisini ve şu ifadeleri destekler: app://www.example.com ve https://open.my.app.

Dikkat: Birden fazla etkinlik, doğrulanmış aynı Android App Link'e çözümlenen intent filtreleri içeriyorsa hangi etkinliğin bağlantıyı işlediğine dair bir garanti verilmez.

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

Amaç filtreleri tanımlama hakkında daha fazla bilgi edinmek için Diğer Uygulamaların Etkinliğinizi Başlatmasına İzin Verme bölümüne bakın.

Gelen amaçlardan veri okuma

Sistem, intent filtresi aracılığıyla etkinliğinizi başlattıktan sonra, ne oluşturmanız gerektiğini belirlemek için Intent tarafından sağlanan verileri kullanabilirsiniz. Gelen Intent ile ilişkili verileri ve işlemi almak için getData() ve getAction() yöntemlerini çağırın. Bu yöntemleri etkinliğin yaşam döngüsü boyunca istediğiniz zaman çağırabilirsiniz ancak genellikle bunu onCreate() veya onStart() gibi erken geri çağırmalarda yapmanız gerekir.

Intent konumundan nasıl veri alınacağını gösteren snippet'i burada bulabilirsiniz:

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ı istem, ara sayfa veya giriş bilgileri olmadan doğrudan içeriğe yönlendirmelidir. Daha önce uygulamayı hiç açmamış olsalar bile kullanıcıların uygulama içeriğini görebildiğinden emin olun. Sonraki etkileşimlerinde veya uygulamayı Başlatıcı'dan açtıklarında kullanıcılara istem göndermekte sakınca yoktur.
  • Uygulamanızın, derin bağlantı aracılığıyla uygulamanıza giren kullanıcıların geri gitme beklentilerini karşılaması için Yedekle ve Yukarı ok ile gezinme bölümünde açıklanan tasarım yönergelerini uygulayın.

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

Derin bağlantı için belirttiğiniz intent filtresi URI'lerinin doğru uygulama etkinliğine çözümlenip çözümlenmediğini test etmek için etkinlik yöneticisi (am) aracıyla Android Hata Ayıklama Köprüsü'nü kullanabilirsiniz. Adb komutunu bir cihaza veya emülatöre karşı çalıştırabilirsiniz.

Adb ile intent filtresi URI'sini test etmek için kullanılan 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şkilendirilmiş 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. Bununla birlikte, sistemin uygulamanızı bir dizi URI'nın varsayılan işleyicisi olarak değerlendirmesini sağlamak için 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: