Android'de derin bağlantı, sizi doğrudan belirli bir web sitesine bir hedeftir.
Gezinme bileşeni, iki farklı tür derin bağlantı oluşturmanıza olanak tanır: açık ve dolaylı.
Açık bir derin bağlantı oluşturma
Açık derin bağlantı, tek bir örnektir
PendingIntent
kullanan bir derin bağlantının
kullanıcıları uygulamanızda belirli bir konuma götürmek için kullanılır. Bir kullanıcının dikkatini dağıtan
bir bildirimin veya uygulama widget'ının parçası olarak açık derin bağlantı,
örneğine bakalım.
Bir kullanıcı uygulamanızı açık bir derin bağlantı üzerinden açtığında görev geri yığını
temizlendi ve derin bağlantı hedefiyle değiştirildi. Zaman
iç içe yerleştirme,
her iç içe yerleştirme seviyesinden başlangıç hedefi (yani başlangıç hedefi)
her <navigation>
öğesinden gelen dize de yığına eklenir.
Bu durum, kullanıcı derin bir bağlantıdan Geri düğmesine bastığında
üzerinde yoğunlaştıktan sonra, gezinme yığınına
uygulamanıza giriş noktasından girdi.
Şunu kullanabilirsiniz: NavDeepLinkBuilder
PendingIntent
oluşturmak için
aşağıdaki örnekte gösterildiği gibidir. Sağlanan bağlam
Activity
ise oluşturucu,
PackageManager.getLaunchIntentForPackage()
varsayılan etkinlik olarak belirleyin.
Kotlin
val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .createPendingIntent()
Java
PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .createPendingIntent();
Varsayılan olarak, NavDeepLinkBuilder
açık derin bağlantınızı şurada başlatır:
uygulamanızın manifest dosyasında belirtilen varsayılan lansman Activity
. Eğer
NavHost
başka bir etkinlikte bulunuyor, bileşenini belirtmeniz gerekiyor
derin bağlantı oluşturucuyu oluştururken verilen ad:
Kotlin
val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(DestinationActivity::class.java) .createPendingIntent()
Java
PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(DestinationActivity.class) .createPendingIntent();
ComponentName
kullanıyorsanız:
doğrudan oluşturucuya iletebilirsiniz:
Kotlin
val componentName = ... val pendingIntent = NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(componentName) .createPendingIntent()
Java
ComponentName componentName = ...; PendingIntent pendingIntent = new NavDeepLinkBuilder(context) .setGraph(R.navigation.nav_graph) .setDestination(R.id.android) .setArguments(args) .setComponentName(componentName) .createPendingIntent();
Mevcut bir NavController
hesabınız varsa:
Ayrıca, yeni bir bağlantı oluşturmak için
NavController.createDeepLink()
.
Örtülü derin bağlantı oluşturma
Dolaylı derin bağlantı, uygulamada belirli bir hedef. Derin bağlantı çağrıldığında (ör. Kullanıcı bir bağlantıyı tıkladığında: Android, uygulamanızı ilgili seçeceğiz.
Derin bağlantılar URI, intent işlemleri ve MIME türleriyle eşleştirilebilir. Şunları yapabilirsiniz: tek bir derin bağlantı için birden fazla eşleme türü belirtebilir, ancak URI'nın bağımsız değişken eşleştirmesine öncelik verilir, ardından işlem ve ardından MIME kullanılır. türü.
URI, işlem ve MIME türü içeren örnek bir derin bağlantıyı burada bulabilirsiniz:
<fragment android:id="@+id/a"
android:name="com.example.myapplication.FragmentA"
tools:layout="@layout/a">
<deepLink app:uri="www.example.com"
app:action="android.intent.action.MY_ACTION"
app:mimeType="type/subtype"/>
</fragment>
Ayrıca bir veya daha fazla web sitesine gizli bir derin bağlantı oluşturmak için aşağıdaki gibidir:
- Gezinme Düzenleyici'nin Tasarım sekmesinde, derin bağlantı.
- Özellikler panelinin Derin Bağlantılar bölümünde + simgesini tıklayın.
Açılan Derin Bağlantı Ekle iletişim kutusunda derin bağlantı.
Aşağıdakileri göz önünde bulundurun:
- Şeması olmayan URI'ların http veya https olduğu varsayılır. Örneğin,
www.google.com
,http://www.google.com
vehttps://www.google.com
. {placeholder_name}
biçimindeki yol parametresi yer tutucuları bir veya daha fazlasıyla eşleşiyor karakteri ekleyin. Örneğin,http://www.example.com/users/{id}
şunlarla eşleşir:http://www.example.com/users/4
. Gezinme bileşeni, yer tutucuyu eşleştirerek yer tutucu değerlerini uygun türlere ayrıştır tanımlanan bağımsız değişkenlerin adlarını derin bağlantı hedefi için tanımlanmıştır. Aynı ad tanımlandığında, bağımsız değişken için varsayılan birString
türü kullanılır değer. 0 veya daha fazla karakteri eşleştirmek için .* joker karakterini kullanabilirsiniz.- Sorgu parametresi yer tutucuları, bunların yerine veya onlarla birlikte kullanılabilir
yol parametrelerinden farklıdır. Örneğin,
http://www.example.com/users/{id}?myarg={myarg}
eşleşmehttp://www.example.com/users/4?myarg=28
. - Varsayılan veya
Boş değer atanabilir değerlerin eşleşmesi gerekmez. Örneğin,
http://www.example.com/users/{id}?arg1={arg1}&arg2={arg2}
eşleşmehttp://www.example.com/users/4?arg2=28
veyahttp://www.example.com/users/4?arg1=7
. Path'de durum farklı parametreleridir. Örneğin,http://www.example.com/users?arg1=7&arg2=28
yukarıdaki kalıpla eşleşmiyor, çünkü gerekli yol parametresi sağlanmadı. - Fazladan sorgu parametreleri, derin bağlantı URI'si eşleşmesini etkilemez. Örneğin,
örnek,
http://www.example.com/users/{id}
şunlarla eşleşir:http://www.example.com/users/4?extraneousParam=7
olsa daextraneousParam
, URI kalıbında tanımlanmadı.
- Şeması olmayan URI'ların http veya https olduğu varsayılır. Örneğin,
(isteğe bağlı) Google'ın, hesabın sahibi olduğunuzu doğrulamasını sağlamak için Otomatik Doğrulama'yı işaretleyin. URI'nın sahibi. Daha fazla bilgi için bkz. Android App Links'i doğrulayın.
Ekle'yi tıklayın. Bağlantı simgesi . görünene kadar, seçilen hedefin üzerinde derin bağlantı.
XML görünümüne geçmek için Kod sekmesini tıklayın. İç içe yerleştirilmiş bir
<deepLink>
öğesi hedefe eklendi:<deepLink app:uri="https://www.google.com" />
Örtülü derin bağlantıyı etkinleştirmek için uygulamanızın
manifest.xml
dosyası yükleyin. Aşağıdaki özelliklere sahip bir etkinliğe tek bir <nav-graph>
öğesi ekleyin:
aşağıdaki örnekte gösterildiği gibi, mevcut bir gezinme grafiğine işaret eder:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication"> <application ... > <activity name=".MainActivity" ...> ... <nav-graph android:value="@navigation/nav_graph" /> ... </activity> </application> </manifest>
Projenizi oluştururken Gezinme bileşeni, <nav-graph>
öğesinin yerini alır
tüm derin bağlantıları eşleştirmek için oluşturulmuş <intent-filter>
öğeleri içeren öğe
gezinme grafiğinde görebilirsiniz.
Örtülü bir derin bağlantı tetiklendiğinde, arka yığının durumu
dolaylı Intent
öğesinin
Intent.FLAG_ACTIVITY_NEW_TASK
işaretle:
- Bayrak ayarlanırsa görev arka yığını temizlenir ve
derin bağlantı hedefi. Açık derin bağlantıda olduğu gibi,
iç içe yerleştirme grafikleri,
her iç içe yerleştirme seviyesinden başlangıç hedefi (yani başlangıç noktası)
hiyerarşideki her
<navigation>
öğesinden gelen hedef; yardımcı olur. Bu, kullanıcı geri düğmesine az sayıda bağlantı hedefine ulaşırsa, sanki gibi gezinme yığınına giriş noktasından uygulamanıza girdiler. - Bayrak ayarlanmazsa önceki uygulamanın görev yığınında kalırsınız burada örtülü derin bağlantının tetiklendiği yer alır. Bu durumda, Geri düğmesi Yukarı düğmesi, uygulamanızın görevini başlatırken sizi önceki uygulamaya geri götürür .
Derin bağlantıları yönetme
Her zaman varsayılan değeri kullanmanız önerilir
launchMode
/standard
lütfen unutmayın. standard
başlatma modu kullanılırken Navigasyon,
çağırarak derin bağlantıları otomatik olarak işler.
handleDeepLink()
Intent
içindeki açık veya üstü kapalı derin bağlantıları işlemek. Ancak,
Activity
cihazı kullanılırken tekrar kullanılırsa bu işlem otomatik olarak gerçekleşmez
singleTop
gibi alternatif bir launchMode
. Bu durumda,
aşağıdaki gösterildiği gibi onNewIntent()
içinde handleDeepLink()
adlı kişiyi manuel olarak çağırmak için
şu örneği inceleyin:
Kotlin
override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) navController.handleDeepLink(intent) }
Java
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); navController.handleDeepLink(intent); }
Ek kaynaklar
Gezinme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.