Можем ли мы протестировать iOS Universal Links / Deep Links без ассоциации Apple-App-Site (AASA)?

Я реализовал универсальные ссылки в своем приложении, но по какой-то причине файл AASA пока не будет загружен на сервер.


person Bharat Dodeja    schedule 09.11.2017    source источник
comment
Можете ли вы загрузить AASA на другой сервер и протестировать там? По крайней мере, это даст вам некоторое подтверждение того, что ваше приложение настроено правильно.   -  person Oleksiy Ivanov    schedule 11.11.2017


Ответы (3)


Да, вы действительно можете!

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

$ xcrun simctl openurl booted 'YOUR_LINK_HERE'

Это вызовет следующий обратный вызов в appDelegate вашего приложения:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool

... это именно то поведение, которое вы должны ожидать от глубокой ссылки.

только не забудьте включить симулятор ;-)

Что касается универсальных ссылок - обратный вызов appDelegate немного отличается, но это очень небольшой умственный скачок:

func application(_ app: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        if let url = userActivity.webpageURL {
            // parse the url and decide how to handle the universal link

        }
    }
    return true
}
person Noam    schedule 24.01.2018
comment
Как вы могли бы протестировать URL-адрес универсальной ссылки без развертывания файла AASA на корневом сервере вашего веб-сайта? Я думаю, вам нужно сначала развернуть файл AASA ... можете ли вы рассказать подробнее, как это работает? - person Chetan Dobariya; 22.11.2018
comment
Есть ли какая-нибудь команда xcrun, если вы используете подключенное реальное устройство, а не симулятор? - person Aaqib Hussain; 20.02.2020
comment
Я не могу получить полный URL-адрес в методах userActivity. Мой фактический URL-адрес: example.com/6eZ4?class_id=4&member_id=18. но я получаю только короткий URL в userActivity example.com/6eZ4? class_id=4 - person Shahabuddin Vansiwala; 03.09.2020
comment
На самом деле это не работает, он отправляет URL-адрес симулятору и передает его в Safari. Но без файла ассоциации с приложением ничего не происходит, оно не открывается. - person Brett; 20.03.2021

Нет, вы должны загрузить «apple-app-site-association» на сервер с вашим идентификатором пакета и идентификатором команды. Без него не протестируешь. Также вы не можете протестировать его, используя чужой файл «apple-app-site-association», поскольку его идентификатор команды и идентификатор пакета будут другими.

Вы можете загрузить свой файл AASA на сервер heroku для целей тестирования.

person taimoor    schedule 09.11.2017
comment
не могли бы вы предложить, как я могу протестировать глубокую ссылку, загрузив файл AASA на сервер heroku? - person Bharat Dodeja; 14.11.2017
comment
я сделал бесплатный сервер node и сохранил свой файл AASA в корне. Вы можете протестировать свой сервер с помощью этого валидатора limitless-sierra-4673.herokuapp.com. Сервер должен пройти первые пять валидаторов. Я прикрепил URL-адрес ниже для образца. spooky-spell-19694.herokuapp.com/apple-app-site- ассоциация Добавьте базовый URL (spooky-spell-19694.herokuapp.com) в связанные домены в xcode. Проверьте все URL-адреса, обработав их через делегат приложения. - person taimoor; 14.11.2017

Apple, похоже, не поддерживает это.

Однако вы можете просто вызвать метод делегата непосредственно из любого места вашей программы.

NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb];
activity.webpageURL = [NSURL URLWithString:@"https://<your-domain.com>/route"];

[UIApplication.sharedApplication.delegate application: UIApplication.sharedApplication continueUserActivity:activity restorationHandler:^(id restorableObjects) {

}];
person Lee Irvine    schedule 14.11.2018