Öncelikle ne yapmak istiyoruz?

  • Her hangi bir yerden uygulamamıza yönlendirme yapmak ve ilgili sayfayı/içeriği açmak
  • Eğer uygulamamız yüklü değil ise kullanıcıyı direkt olarak store a yönlendirmek
  • Web browser üzerinden açılmış ise ilgili web sayfasına yönlendirmek
  • Dynamic link üretirken kendi domain adresimizi kullanmak
  • Hangi linke ne kadar tıklanmış vs. gibi temel analytics verilere erişmek.

Her ikisi de aynı amaca hizmet etmesine rağmen aralarında ki fark linke tıklanma ve güvenilirlik oranını ciddi derecede etkileyecektir.

Deep Link daha global olanıdır. Yani aynı konfigürasyonu farklı farklı appler yapabilir ve bu durumda deep link ile uygulamamıza yönlendirme işlemi sekteye uğrayabilir. Yani sadece bizim uygulamamız tarafında bu linklerin işlenmesini garanti etmemiş oluruz.

App Link ise bazı doğrulamalar neticesinde(domain) mevcut linkin sadece bizim uygulamamıza yönlenmesini garanti etmiş olur.

assetlinks.json

App Link kullanımı için domain‘in size ait olduğunu doğrulamanız gerekmektedir. Örneğin aykutasil.com adresini kullanmak istiyorsunuz. Bunun için https://aykutasil.com/.weelknown/assetlinks.json yoluna ilgili dosyayı yüklemeniz gerekmektedir. Bu dosyayı oluşturmak için Android Studio‘yu kullanabilirsiniz. Ya da aşağıdaki dosyada ilgili alanları değiştirebilirsiniz.

assetlinks.json

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "co.kolektifhouse.app", <--- Burası
    "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", <--- Burası - For Debug
      "15:7D: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"  <--- Burası - For Prod
    ] 
  }
}]

Yukarıdaki json dosyasının ilgili yerlerini değiştirmeniz ve yukarıda bahsedilen adrese yüklemeniz gerekmektedir.

SHA256 fingerprint

İlgili Android app’ini imzalarken kullandığınız keystore kullanılarak SHA256 üretmeniz gerekmektedir. Her bir uygulama versiyonu(debug/prod vs.) için ayrı ayrı üretilmesi gerekmektedir.

keytool -list -v -keystore my-release-key.keystore

Prod sürümü için Google Play App Signing kullanılıyor ise Play Store sayfasından ilgili app için SHA256 değerini eklemelisiniz. Diğer türlü uygulama imzalama dosyaları farklı olacağından SHA256 değeri yanlış olacaktır.

Play Store > Release > Setup > App Integrity yolunu izleyerek uygulama imzalama dosyasının SHA256 değerine ulaşabilirsiniz.

Firebase Dynamic Links için Firebase bize default olarak domain sağlamaktadır. Bu domain adresini kullanarak dynamic link oluşturabiliriz. Firebase Console > Dynamic Links altından kolayca ilgili sayfaya erişebiliriz.

Ayrıca bu domain haricinde custom domain’de belirleyebiliriz. Fakat bunun için ilgili domain’in Firebase’de host edilmesi gerekmektedir. Eğer web sitemiz için Firebase Hosting kullanıyor isek firebase.json dosyasını güncellememiz gerekmektedir.

Custom domain belirlerken dynamic link olarak kullanacağımız adrese dikkat etmeliyiz. Bunun için ya subdomain belirlemeliyiz ya da dynamic linke özel bir path belirlememiz gerekmektedir. Örneğin domain adresimiz aykutasil.com olsun. Dynamic link için belirleyeceğimiz adres ya link.aykutasil.com şeklinde olmalı ya da aykutasil.com/link şeklinde bir path olmalı. Diğer türlü conflict olacağından yönlendirme işlemi başarısız olacaktır.

Bu kısım benim oldukça zorlandığım kısımlardan biri oldu :/

Diyelim ki https://aykutasil.com şeklinde bir websitemiz var. Ve Firebase harici başka bir yerde host ediliyor.

Dynamic link için https://aykutasil.com/link path’ini kullanmak istiyoruz.

Eğer websitemiz firebase’de host edilmiyor ise bu mümkün görünmüyor.

Çünkü https://aykutasil.com yazdığımızda DNS server başka bir hosta yönlendireceği için dynamic link olarak işlev görmeyecektir.

Dynamic Link için kullanılan domain adresinin bir şekilde Firebase Hosting’e yönlenmesi gerekiyor.

Bu nedenle https://aykutasil.com ile başlayan bir dynamic link üretmemiz mümkün değil. (Firebase harici bir yerde host ediliyor ise)

Bu durumda https://link.aykutasil.com şeklinde bir subdomain kullanabiliriz. Bu subdomain adresini DNS ayarlarından Firebase Hosting’e bakacak şekilde düzenleyebiliriz.

Custom Domain

Firebase Console > Hosting > Add custom domain

Custom Firebase Hosting Domain

  • Sonrasında bu domain adresinin bize ait olduğunu kanıtlamak için DNS ayarlarına bir TXT kaydı eklememizi isteyecek.

  • Bu TXT yapılandırması için bir sonraki adımda göstermiş olduğum A kaydı yapılandırması ile aynı yöntemi izliyoruz.

Daha sonra https://aykutasil.com için domain yapılandırmasına yeni bir A kaydı eklememiz gerekmektedir. Bunu yapmak için domain servis sağlayıcı ayarlarına gitmemiz gerekmektedir.

Custom Firebase Hosting Domain

Ben domain adresimi Cloudflare üzerinden yapılandırdığım için bunu Cloudflare ayarlarından yapacağım.

Custom Firebase Hosting Domain

En sondaki link olan kaydı link1 olarak kaydetmelisiniz.

Firebase Hosting sayfasına gittiğinizde eklediğiniz domain i görebilirsiniz. Bir süre sonra Status u Connected olarak görmeniz gerekmektedir..

Custom Firebase Hosting Domain

Connected durumuna geçtikten sonra Firebase otomatik olarak well-known/assetlinks.json dosyasını ekleyecektir.

https://link.aykutasil.com/.well-known/assetlinks.json Custom Firebase Hosting Domain

Ve artık bu subdomaini kullanarak Firebase Dynamic Links oluşturabilirsiniz.

Android 12 ve üstü yüklü cihazınız var ise aşağıdaki komut satırı yardımı ile App Link verify edebilirsiniz.

adb shell pm get-app-links package-name

Aşağıdakine benzer bir cevap almanız gerekiyor.

Custom Firebase Hosting Domain

Test

$ adb shell am start
        -W -a android.intent.action.VIEW
        -d "https://link.aykutasil.com/coupon" co.kolektifhouse.app

$ adb shell am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "https://link.aykutasil.com/coupon"

Kaynaklar