Universal Link in IOS

Taha Muhsin Yılmaz
Arcelik IoT Labs
4 min readDec 28, 2019

--

Herkese merhabalar. Bu yazıda universal link yapısının projeye entegre edilmesinden bahsedilecektir.

Öncelikle universal link ne demek ondan bahsedelim. Universal Link, web domainlerinin mobil için de kullanılması işlemine verilen addır.

Neden Universal Link’e ihtiyaç vardır?

Örneğin Twitter’ı ele alalım. Twitter’da beğenilen bir twit’in farklı platformlarda paylaşılması işlemi https linkler üzerinden yapılır. Https linkler bütün web platformalarında desteklenirken, linkle mobil’in ateşlenmesi ek bir efor gerektirmektedir. IOS Associated Domains bu probleme çözüm sağlamaktadır. Associated Domains işlemi gerçekleştirildikten sonra belirtilen web domain’iniz apple tarafından uygulamanıza dedike edililir ve password autofill, universal link, app suggestion while browsing gibi belirtilen domainde gerçekleştirilecek işlemler uygulama ile bağlantılı olur.

Nasıl yapılır?

Associated Domains işleminin gerçekleştirilebilmesi için maalesef apple developer hesabının enroll olması gerekmektedir. Bu yüzden bu işlemi yapabilmek için $99 ücret ödeyim enroll olmak gerekmektedir.

Öncelikle uygulama içerisinde proje dosyasına tıklayıp Signing & Capabilities’e tıklıyoruz.

Ardından + Capability’ e tıklıyoruz ve Associated Domains seçiyoruz.

Daha sonra + butonuna basarak yeni bir associated domain oluşturuyoruz. example.com yazan yere kendi domaininizi yazmalısınız.Ayrıca www sundomainini kullanıyorsanız one da buraya yazmanız gerekmektedir.

Burada universal link için webcredentials yerine applinks yazılmalıdır.

Bu işlemin ardından apple developer tarafında yapılacak işlemleri bitirmiş oluyoruz. Bu aşamadan sonra web sitenin barındığı sunucunun ana dizinine aşağıdaki dosyanın atılması gerekmektedir. Dosyanın herhangi bir uzantısı olmamasına ve dosyaya verilen ismin apple-app-site-association olmasına dikkat edilmelidir. Dosya sunucuya yüklendikten sonra doğruluğunu buradan kontrol edebilirsiniz.

Bu dosya içerisinde değiştirmeniz gereken yerler appID keyine ait değer ve paths keyine ait değerlerdir. appID ile iki değer girmelisiniz. Birincisi Apple Team ID (Developer Apple sitesinden Account kısmında görülebilir), diğeri ise uygulamanıza ait bundle id.

“paths” ile verilen domainin hangi pathleri girilirse uygulama açılsın kararını veriyoruz. Örneğin paths: [“/questions”] girilirse sadece example.com/questions içeren linkler mobil uygulamayı tetikleyebilir. Yukarıdaki gibi * verirseniz ise bütün pathler uygulamayı tetikler.

Bu işlemin ardından uygulamayı bir derleyin. Artık uygulamanız universal link’e entegre olmuş bulunmaktadır. Fakat uygulama açıldıktan sonra linke göre yönlendirme işlemi yapılmalıdır (Eğer sadece uygulamayı açtırmak istiyrsanız bu yönlendirmeyi yapmanıza gerek yoktur.) . Zira bu durumda uygulamanız açılır main window’un view controler’unu gösterir. Sizin gelen linklere göre sayfa yönlendirmesi yapmanız gerekmektedir.

Link Handle

Bilindiği üzere uygulama açıldığı anda AppDelegate class’ı ile başlamaktadır. IOS 13'den sonra AppDelegate’ın bazı yükleri SceneDelegate adında yeni bir class’a da devredildi. Uygulama link ile açıldığında AppDelegate’de UIApplicationDelegate protokolünün

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?)

metodu ateşlenir. Aynı şekilde SceneDelegate class’ında UIWindowSceneDelegate protocol’üne ait

func scene(_ scene: UIScene, continue userActivity: NSUserActivity)

metodu ateşlenir. Dolayısıyla iki class içerisinde de bu metodları alıp düzenlememiz gerekiyor.

Not: Eğer uygulamanızın deployment target’ ı IOS 13.0 dan sonra ise AppDelegate’ de bu işlemleri yapmanıza gerek yoktur.

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {

if userActivity.activityType == NSUserActivityTypeBrowsingWeb {

let url = userActivity.webpageURL!

print(url.absoluteString)

//handle url and open whatever page you want to open.

}

}

Yukarıdaki kodu açıklayacak olursak kullanıcı eğer web üzerinden yani link ile eliyorsa url’i al şeklindedir. Url alındıktan sonra parse edilerek istenilen ekrana buradan yönlendirme yapılabilir. Eğer uygulama IOS 12 de destekleyecek ise yukardaki işlemin AppDelegate içerisinde de yapılması gerekmektedir.

Nasıl Çalışıyor?

Son olarak nasıl çalıştığından bahsedecek olursak. Öncelikle Associated Domains kısmında verdiğimiz URL uygulama telefona yüklendiğinde Apple’ gönderilir. Apple aldığı bu url’in sonun /apple-app-site-association ekleyerek istek atar. Yan yüklediğimiz dosyayı fetch eder. Oradaki team id ve app id’ye göre kendi look-up’ına kaydeder. Böylelikle her link tıklamalarında, browsing işlemlerinde veya auto fill’de bu kontrol yapılır.

Sonuç

Bu yazı ile universal link entegrasyonundan yapısından ve nasıl çalıştığından bahsettik. Eğer sizde kaliteli bir ürün çıkarmak istiyorsanız bence kesinlikle uygulamanıza bu özelliği eklemelisiniz. Umarım faydalı olur. İyi kodlamalar✋🏻.

--

--