Android’de Firebase Dynamic Link Kullanımı | Autor: Mustafa Süleyman Kınık | Julio de 2021
Hexel Ramla. Bugün Firebase’in bizlere sunduğu bir özellik olan Dynamic Links’i inceleyip benzer yapılardan farklarını açıklayarak Android üzerinde bir örneğini gerçekleştireceğiz.
Bu yazdığım içeriğe mobiler.dev oluşumu üzerinden de ulaşabilir, mobil uygulama geliştirme üzerine farklı içerikleri takip edebilirsiniz.
Link’ler dinámico, en basit haliyle kullanıcıları herhangi bir bağlantıya yönlendiren akıllı URL’lerdir. Firebase’in, deep link’lerin zayıf yönlerini ele alıp kısacası yeni bir isim ile markalaştırıp bizlere sunduğu bir hizmettir. Mobil cihazlarda olduğu gibi web sistemleri içinde kullanılabileceği gibi kendi aralarında da bir köprü oluşturabilmektedir. Aynı zamanda Firebase bu servisi bizlere análisis servisi ile kullanmamızı önermektedir. Böylece bizlerin, oluşturduğumuz URL’ler ile belirli çıktılar almamıza yardımcı olacaktır. Lakin şu anki konumuz bu olmadığı için dynamic link’lere odaklanacağız.
profundo Asociación: Deep link’ler intent filter’lerle bizlere belirli link’ler ile belirli activity’ler arasında köprüler oluşturmamıza yarayan yapılardır. Teoride dynamic link’ler dahil bundan Sonra geren yapılar veya servisler aslında bunun üzerine ek özellikler konularak bizlere sunulmuşvariantları diyebiliriz.
Enlace de aplicación: Android 6 (API 23) ile gelen deep link yapısının üzerine güvenlik, kullanıcı deneyimi gibi taşlar ekleyerek bizlere daha gelişmiş özellikler sunan yapıdır. Dilerseniz App Link ile ilgili daha fazla bilgi elde etmek isterseniz mobiler.dev üzerinde yazılmış bir başka yazıya Bradan ulaşabilirsiniz.
Enlace dinámico: Dynamic link’ler deep link’lerin eksikliklerini ve zayıflıklarını gidermek için çıkmış bir Firebase servisidir. Android, iOS ve web üzerinden kullanılabilmekte ve aynı davranışları bu sistemler üzerinde gösterebilmektedir. Mobil ICINkonuşmakgerekirsekullanıcısizlerinoluşturduğu bien enlace dinámico ILEuygulamanızdakibelirli bien yereerişmekisterse bunu enlace profundo Gibi sizlere O actividad üzerinde filtro de intención de pozo ILE Yada sizlerinoluşturğrinğuplete de administrador Link’ler dinámico akıllı bağlantılardır. Yani kullanıcı eğer link’in işaret ettiği uygulamayı yüklemediyse bu link’ler sizlere uygulama mağazasına yönlendirebilir ve uygulamayı indirdiğiniz de link’lerin hafızal arışin’link’lerin hafızal arışinler link’lere query gönderebilirsiniz. En başta konuştuğumuz gibi análisis ile birlikte link’lerin kullanımı ile ilgili veriler elde edebilirsiniz.
İlk başta Firebase entegrasyonunu gerçekleştirmemiz gereklidir. https://console.firebase.google.com bağlantısından ilk olarak üzerinden «Agregar elemento» diyoruz.
Proje ismimizi belirliyoruz.
Bizden Google Analytics için ne yapmamız istediğini soruyor. Önerilen seçenek aktif et demektir ve biz de aktif edip devam ediyoruz.
La cuenta predeterminada de Firebase seçeneği seçip projemizi yaratıyoruz.
Bu adımsonrası projemiz yaratılıyor. Daha Sonrasında entegre edeceğimiz platformu seçiyoruz. Bizler burada Android’i seçeceğiz.
Bizlerden bu kısımdabirden fazla girdi istemekte. İlk başta nombre del paquete’imizi tanımlayalım. nivel de aplicación’imizdeki gradle dosyamızdaki ID de aplicación ismimizi buraya ekliyoruz.
Daha Sonrasında opsiyonel olarak istediği aplicación nickname’imizi ekliyoruz.
Ensonunda tekrardan opsiyonel olarak istediği SHA-1 sertifikasını ekliyoruz. Normalde kullanacağımız çoğu servis bunu gerekli olarak istemez. Ama sizlerin de görebileceği gibi Dynamic Links’ler için bu gereklidir. Peki SHA-1’i nasıl elde ederiz.
Bunun içinbirden fazla yol vardır fakat ben sizlere kullandığım yolu göstereceğim.
Sağdaki Gradle tab’ına bastığınızda çıkan klasörlerden Android’i seçip signatureReport’a çift tıklarsanız bizlere SHA-1 ile birlikte başka sertifika kodlarını da verecektir.
Ve en sounda indireceğimiz JSON dosyasını project görünümünde projemize ekliyoruz.
Firebase entegrasyonu sonrası şimdi de Dynamic Links özelinde neler yapmalıyız ona bakalım. Nivel de aplicación Gradle dosyamızın içine eğer Kotlin kullanıyorsanız bunları;
implementation platform('com.google.firebase:firebase-bom:28.1.0') implementation 'com.google.firebase:firebase-dynamic-links-ktx' implementation 'com.google.firebase:firebase-analytics-ktx'
Java kullanıyorsanız bunları entegre etmeniz gerekiyor.
implementation platform('com.google.firebase:firebase-bom:28.1.0') implementation 'com.google.firebase:firebase-dynamic-links' implementation 'com.google.firebase:firebase-analytics'
Gradle dosyamızı senkronize ettikten sora artık Dynamic Link’ler projemize kullanıma hazır hale gelmiş durumdadır. Sizlere yazının başlarında bahsettiğim gibi Dynamic Link’ler klasik deep link yapısının üzerinde kurulmuş ve çok daha gelişmiş bir yapıdır. Bu sebeple Firebase konsolu üzerinde yapacağımız eklemelerin Yanı Sira codebase’imiz üzerinde yapacağımız örnekte klasik manifiesta dosyası üzerinden intención filter’lerle konuyu işlemek yerine farklışılázılázıría Aynı Zamanda bu kod yapımızda Singleton gibi diseñar pattern’ler kullacağımız için ister buradan kodların ilgili kısımlarını Takip edebilir isterseniz de GitHub
Farklı bir yaklaşım uygulayacak olsak bilis adet yerini bulsun diye Firebase konsolu üzerinden yapacağımız eklemeleri ilk olarak klasik intent filter yapısı ile klasik bir deep link yaklazerinımım
İlk başta Firebase konsolu üzerinde Engage başlığı altındaki dynamic link seçeneği üzerinden Yini bir dynamic link oluşturuyoruz. İlk başta bir domain oluşturmamız gerekli, bunun için Firebase bizlere virtual bir domain sağlamaktadır. Sitio web de Ama kendi sitenizin de domain’ini kullanabilirsiniz. Lakin kendi web domain’inizi kullanabilmeniz için Firebase’in sizlere vereceği text’i DNS provider’ınıza gömmeniz gerekli. Ben bu işlemler için dominio virtual bir kullanacağım.
Ekran görüntülerinden de görebileceğiniz üzere hızlıca bir Dynamic Link oluşturdum ve bu oluşturma sırasında Dynamic Link’imiz için bir deep link yarattım.
Şu anda başka hiçbir ayarları ellemeden direkt olarak creó diyerek işlemimizisonlandırıyorum.
İlk başta bir actividad yaratıyoruz ve daha sonrasında bu activity’nin intent filter’ini yaratmak için manifest dosyasını açıyoruz.
Data tag’i içindeki kısmımız aslında URL’lerimiz (deep link’imizin) parçalara bölünmüş halidir. Category’i tag’i de aslında activity’mizin ulaşılma / kullanım şeklini yönetmemizi sağlar.
Bu işlemler Sonunda deep link’imizi ister emulator veya telefonunuz not defterine veya SMS bölümüne yazarak ve daha sonrasında tıklayarak bu activity’mize ulaşıyoruz.
Klasik deep link kullanımısonrası şimdi de Dynamic Links yapısınıilk başta Firebase konsolundan daha sora ise Android codebase’i üzerinden inceleyelim.
İlk başta path’imizi oluşturuyoruz.
Tekrardan deep link’imizi oluşturuyoruz. Bu sefer bir query de ekliyoruz. Bu query, uygulamamıza veri olarak aktaracağımız Integer bir değer olacaktır.
Örneğimiz Android üzerinden olduğundan dolayı iOS için dynamic link’imizin davranışı ayarlamıyor ve directo Android için olan tercihe geçiyoruz.
Burada aslında yaptığımız şey eğer bir kullanıcı URL’imize tıkladığında uygulamamız yüklü değilse bizi uygulamamızın mercado sayfasına yönlendiriyoruz. Lakin bu uygulamamızın Bill market sürümü olmadığı için bunu örneklendiremiyoruz. Eğer markette var olan bir uygulamanız varsa bunu yapmanızı kesinlikle tavsiye ederim.
Bir diğer seçenek olan «Abrir enlace profundo en su aplicación de Android» seçeneğini seçerek aslında Enlace profundo ile otomatik olarak uygulamamızı eşliyoruz. Böylece link’e tıkladığımızda otomatik olarak uygulamamızın launcher activity’si açılacaktır.
Son olarak dinámico Link’imiz için ön izleme ekliyoruz. Özellikle bu ayarlamayı yaptıktansonra SMS ile linki gönderirseniz başlık, açıklama ve bir ön izleme resmi oluşacaktır.
Artık Firebase ayarlamalarımızı yaptığımıza göre diğer işlemlerimize geçebiliriz.
İlk olarak yukarıda bahsettiğimiz ön izleme özelliğini görelim. Eğer simulator kullanıyorsanız rastgele bir numaraya test işlemi için bu linki mesaj olarak gönderebilirsiniz.
Şimdi yapacağımız işlem Splash Activity’imizde path ve query’leri yakalayıp Singleton yapısıyla oluşturacağımız DynamicLinksManager sınıfımıza bu değerleri gönderek olacaktır. Aslında örneğimiz kısa bir örnek fakat eğer biz query ve path’imizi sonradan oluşturacağımız sınıflarda da kullanılmasını istiyorsak bu yöntem Singleton ile kolayca bu deflarırınını
Bu yapı aslında bu işlemleri yapmak için bizlere Firebase dokümanlarında önerilmektedir. «PendingDynamicLinkData.link» Uri formatındadır ve bunu yine Uri formatında oluşturduğumuz deepLink içine tanımlıyoruz. Daha Sonra getQueryParameter ile oluşturduğumuz deep link’insonunda ? işareti ile başlayıp oluşturduğumuz preguntar acerca de ismimizi sorguluyoruz ve bundan gelen Integer’ı DynamicLinksManager’ımızın saveData fonksiyonuna aktarıyoruz.
Oluşturduğumuz enum sınıf yapısını dadas las circunstancias ile kullanıp eğerbirden fazla path’imiz varsa bu path’in hangi Activity’i başlatması gerektiğini belirliyoruz. Bizim bir adet path’imiz var. Aynı zamanda else ile birlikte eğer path’lerimizi yanlış bir şekilde codebase’e tanımladıysak veya herhangi bir sorun olursa 404 hatası ImageView’ı gösterecek bir Activity’i başlatıyoruz. addOnFailureListener ise aslında try / catch’teki catch olarak düşünebilirsiniz. Herhangi bir hatayı yakalayıp bunun içinde log olarak bastırıyoruz.
Hızlıca DynamicLinksManager sınıfımıza bakmak gerekirse;
Bir Singleton yapısı oluşturup tek bir obje ile bütün sınıfların bu objeyle kullanımını sağlıyoruz. Sınıf içinde ise bahsettiğimiz gibi indirim oranını tanımlıyor ve değer ataması yapıyoruz.
Şimdi CampaignActivity’imize geçelim. Aşağıda encabezado TextView’i hariçgeri kalan kısımlar bizlerin DynamicLinks’i içindir. Título kısmı ve bununla ilgili olan Director general kısmı konumuzla alakası olmadığı için sizlerin insiyatifine bırakıyorum. İsterseniz sizler GitHub repo’sundan Genel olarak projenin diğer kodlarına hızlıca bakabilirsiniz.
Burada ise kaydettiğimiz Integer’leri manager sınıfımızda alıp component’lerimize set etmekteyiz. Ve bütün işlemleri onCreate üzerinden basit bir şekilde halletmekteyiz. Artık projemiz bitti. İsterseniz sizler direkt olarak tek bir Actividades üzerinden manager sınıflar olmadan aynı şekilde denemenizi yapabilirsiniz. İsterseniz GitHub üzerinden repo’yu indirebilir ve projenin tamamını deneyebilir ve üzerine Jeni eklemeler yapabilirsiniz. Daha fazla dynamic link ile basitçe eklemeler yapabilmeniz için enum sınıfınıza Jeni dynamic link activity’si için eklemer yapabilir ve deneyebilirsiniz. Tabiki enum sınıf kullanımı zorunlu değil fakat enum kullanımının daha temiz bir yapı oluşturacağını düşündüğüm için ben bu şekilde kullanmaktayım.
Sizler Bradan GitHub repo’ma ulaşabilirsiniz.
Kenakra
https://firebase.google.com/docs/dynamic-links
https://www.mobiler.dev/post/android-app-link-entegrasyonu
https://stackoverflow.com/questions/53078823/difference-between-deep-links-android-app-links-firebase-dynamic-links-and-app