Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to NOT handle some Universal Links programmatically?

My iOS application handles universal links to redirect safari users to my app. So far everything is working great, if a user tap a link to my web site from Google my app is opening instead of my web site like this:

from safari https://my-web-site.com -> my-app

But my app doesn't implement certains features that my web site does, so I would like to programmatically reject some URLs and let my users on safari instead of redirecting him in my app, like this:

from safari https://my-web-site.com -> my-app

OR

from safari https://my-web-site.com?reject -> safari

That should by possible according to Apple documentation:

It’s important to understand that if your app uses openURL: to open a universal link to your website, the link does not open in your app. In this scenario, iOS recognizes that the call originates from your app and therefore should not be handled as a universal link by your app.

Unfortunately that's not what's appending, instead of staying in safari, my user is redirected to my app for a brief moment, then redirected again to safari like this:

from safari https://my-web-site.com?reject -> my-app (briefly) -> safari

here is my code for AppDelegate.swift:

internal func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    guard let url = userActivity.webpageURL else { return false }
    guard let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true) else { return false }

    let params = urlComponents.queryItems ?? []

    if params.contains(where: { $0.name == "reject" }) {
        // This line should prevent the app from opening according to Apple's documentation 
        application.open(url)
        return false
    } else {
        return true
    }
}

So anyone have an idea how I could make the rejection of an Universal link the way it's described by Apple's documentation ?

note: the rejection of an universal link need to be done programmatically by the app, according to data stored locally. So adding a path exception in the apple-app-site-association file is not an option in my case :

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "XXXXXXXXX.com.my-app",
        "paths": [
          "*",
        "NOT /reject"
        ]
      }
    ]
  }
}
like image 284
Julien Baillon Avatar asked Jun 06 '26 19:06

Julien Baillon


1 Answers

If you prefix an entry in the paths array with "NOT" then you can explicitly prevent a match. So in your example you could do something like

["NOT /settings/*", "NOT /activity/*", "/*"] 

which would prevent paths with /settings or /activity prefixes, and then match everything else.


Reference

like image 112
えるまる Avatar answered Jun 08 '26 09:06

えるまる



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!