Как НЕ обрабатывать некоторые универсальные ссылки программно? - PullRequest
0 голосов
/ 03 октября 2019

Мое приложение iOS обрабатывает универсальные ссылки для перенаправления пользователей сафари в мое приложение. Пока все работает отлично, если пользователь нажимает ссылку на мой веб-сайт из Google, вместо моего веб-сайта открывается мое приложение, например:

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

Но мое приложение не поддерживает некоторые функции, которыемой веб-сайт делает, поэтому я хотел бы программно отклонить некоторые URL-адреса и позволить своим пользователям использовать сафари вместо перенаправления его в моем приложении, например:

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

ИЛИ

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

Это возможно в соответствии с документацией Apple :

Важно понимать, что если ваше приложение использует openURL : чтобы открыть универсальную ссылку на ваш сайт,ссылка не открывается в вашем приложении. В этом сценарии iOS распознает, что вызов поступает из вашего приложения и поэтому не должен обрабатываться вашим приложением как универсальная ссылка.

К сожалению, это не то, что добавляется, вместо того, чтобы оставаться в сафари, мой пользовательненадолго перенаправляется в мое приложение, а затем снова перенаправляется в сафари следующим образом:

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

вот мой код для 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
    }
}

Так что у кого-нибудь есть идеякак я могу сделать отклонение универсальной ссылки так, как это описано в документации Apple?

примечание: отклонение универсальной ссылки должно быть сделано программно приложением, в соответствии с данными, хранящимися локально. Поэтому добавление исключения пути в файл apple-app-site-association * не является опцией в моем случае:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "XXXXXXXXX.com.my-app",
        "paths": [
          "*",
        "NOT /reject"
        ]
      }
    ]
  }
}

1 Ответ

0 голосов
/ 03 октября 2019

Если вы префикс записи в массиве путей с "NOT", то вы можете явно предотвратить совпадение. Таким образом, в вашем примере вы можете сделать что-то вроде

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

, что предотвратит пути с префиксами /settings или /activity, а затем совпадет со всем остальным.


Ссылка

...