IOS deep linking ve universal links nedir & nasıl yapılır

Deep linking, türkçe ifade etmeye çalışırsak: derin bağlantılama;

Bildiğiniz gibi, bağlantıları web sitelerin içeriğine ulaşmak için kullanırız,

http://www.ftorun.com gibi veya site içerisindeki bir bağlantı

http://www.ftorun.com/programlama/c-sharp/webconfigde-deger-tutmak.aspx gibi.

Bu adresler sizin direk olarak istediğiniz web sayfayasına ulaşmanızı sağlar.

Ancak bir mobil uygulama geliştirdiysek ve uygulama içerisindeki bir sayfaya direk ulaşma ihtiyacımız olursa ne yapacağız, bu tarz durumlar için URL şemaları tanımlamamız gerekiyor. Uygulamamızı oluştururken mesela myapp şemasını kullanmayı seçtiğimiz zaman myapp:// yazarak herhangi bir başka uygulama üzerinden veya web sitesinden uygulamanızı kolayca açabilirsiniz.

Peki uygulamanızın içerisindeki özel bir içeriğe bu adresten direk ulaşmak istersek ? O zaman da myapp://takvim yazarak içerisine takvim parametresini göndermiş oluruz, burada gönderdiğimiz parametre tamamen bize kalmış bu noktada hiyerarşik düzenli bir yapı kullanarak uygulamanın bütün alanlarına kolayca dışarıdan erişim sağlayabiliriz.

Peki ama bizim bir web sitemiz var ve bu web sitesine uyumlu bir de mobil uygulama yaptık.  Mobil  uygulama üzerinden web sitesine girmeye çalışıldığında da uygulama yüklüyse uygulamanızın ilgili kısmının açılmasını istiyoruz. Eminim bu şekilde çalışan bir çok uygulama görmüşsünüzdür. Şimdi kendi uygulamanızda bunu nasıl gerçekleştirebileceğinizi anlatmaya çalışacağım.

IOS 9dan önce web sitenizi uygulamanız ile entegre etmek için webden mobil cihazı algılayıp kendi custom şemanıza yönlendirme yapmanız gerekiyordu, IOS 9 ile birlikte apple “IOS Universal Link” sistemini getirdi, böylelikle uygulamanız ve web siteniz ortak bir şemayı kullanabilecek.

Peki neler yapmamız gerekiyor.

1. Apple geliştirici sitesinden App Id  Associated Domains düzenlemesi: developer.apple.com sitesine girip App IDs kısmından uygulamanızı daha önceden oluşturmuş olmalısınız, oradan edit seçeneğini seçerek Associated Domains özelliğini aktif yapalım.

2. XCode projemizden uygulamamızın Capabilities kısmını aktif edip ardından aşağıda yer alan domains kısmından applinks:www.mywebsite.com şeklinde ekleyelim.

3.Web sitemizde yapmamız gereken düzenlemeler: web sitemizin bize ait olduğunu ve onu mobil uygulamanın yansıması olarak kullanacağımızı apple’a (bir nevi) inandırmak için uygulamamızın ana dizinine apple-app-site-association isimli bir dosya oluşturmamız gerekiyor.

Kısaca AASA (apple-app-site-association) dosyası da denilen bu dosyanın yapısı şu şekilde olmalı:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": “JHGFJHHYX.com.facebook.ios",
        "paths": [
          "*"
        ]
      }
    ]
  }
}

Dosyayı oluşturduktan sonra uygulamanın ana dizinine eklediğinizde ve şu adrese girdiğinizde dosyayı gördüğünüzden emin olun

https://<<sitenizin_adresi>>/apple-app-site-association 

ayrıca şunlara dikkat edin:

  • Dosyanın uzantısı olmadığından emin olun, adı direk “apple-app-site-association” olsun.
  • Siteniz HTTPS üzerinde çalışmalı.
  • Sunucunuzda application/json MIME tipi tanımlanmış olsun.
  • dosyanın büyüklüğü 128kb ı geçmemeli.

işiniz bittiğinde bu siteden kontrol edebilirsiniz:

https://branch.io/resources/aasa-validator/#resultsbox

Artık uygulamamıza IOS evrensel bağlantılarını neredeyse kurduk ve web sitemiz ile bağladık geriye bir tek bunu uygulamanın içerisinden yakalamak kaldı.

Uygulama içerisinde appdelegate içinden

application:continueUserActivity:restorationHandler

metodunu kullanarak gelen adres içeriğine ulaşabiliriz,


func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    print("Continue User Activity called: ")
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let url = userActivity.webpageURL!
        print(url.absoluteString)
    }
    return true
}