Универсальные ссылки в macOS

Начиная с iOS9 универсальные ссылки работают на iOS, но мне интересно, есть ли что-то подобное на macOS? У нас есть приложение, которое является macOS-приложением с соответствующим веб-приложением, и нам бы хотелось, чтобы ссылки, по которым щелкает пользователь, открывались в Mac-приложении, а не открывались в браузере с целевой ссылкой.

Возможно ли это в macOS? Я только что нашел образцы для iOS, но не для macOS?!?


person Georg    schedule 06.12.2016    source источник
comment
Он недоступен в MacOS. Это было бы эпическим раздражением и работало бы только в Safari; что ограничит его удобство использования.   -  person Petesh    schedule 06.12.2016
comment
В iOS это не ограничивается Safari, и его можно отключить даже для каждого домена... Но я ожидал, что ответ будет отрицательным :(   -  person Georg    schedule 06.12.2016
comment
Недоступно в macOS. Однако вы можете использовать пользовательскую схему перенаправления URI. Это больше работы и менее удобный пользовательский интерфейс, но именно так в настоящее время работают такие приложения, как Spotify.   -  person Alex Bauer    schedule 07.12.2016


Ответы (1)


Для поддержки универсальных ссылок в macOS требуется поддержка как вашего приложения, так и вашего веб-сайта (и macOS 10.15+).

Дополнительные сведения см. в документации Apple Разрешение приложениям и веб-сайтам ссылаться на ваш контент ( статья посвящена глубоким ссылкам iOS, tvOS и macOS) и его подстатьям Включение универсальных ссылок, а также обработка универсальных ссылок.

Краткий обзор:

По сути, это то же самое, что и в iOS: вам нужно создать файл apple-app-site-association, который будет размещен на вашем сервере либо в корневом каталоге, либо в каталоге .well-known (описано в разделе "Включение универсальных ссылок", ссылка на который приведена выше). . Он описывает, какие пути URL-адресов могут быть переданы вашему приложению. Важно, чтобы этот файл был действительным JSON (подтвердите его!) и обслуживался через HTTPS с действительным сертификатом и без каких-либо перенаправлений!

Вам необходимо включить функцию «Связанные домены» в вашем профиле обеспечения. Детали зависят от того, управляет ли Xcode вашими профилями или нет. В вашем файле прав (обычно редактируемом на вкладке «Подписание и возможности» вашей цели в Xcode) вам нужно добавить соответствующий связанный домен, например applinks:my.domain.example (без https:// или чего-то еще, просто необработанное доменное имя).

Затем вам нужно реализовать application(_:continue:restorationHandler:) в своем делегате приложения для обработки универсальной ссылки. .

Может раздражать, когда macOS впервые выбирает ассоциацию во время разработки. Советы по отладке:

  • Откройте Console.app и отфильтруйте swcd, это демон, отвечающий за связанные веб-учетные данные и универсальные ссылки. Иногда вы видите подсказки, почему это не сработало (например, отказ от файла apple-app-site-association).
  • Также мне пришлось убить демона swcd, чтобы он перезапустился launchd, а затем забрать изменения/исправления, которые я внес в файл apple-app-site-association. И iOS, и macOS обычно должны перезагружать этот файл при «установке приложения»1 (более четко это не указано; я предполагаю, что они имеют в виду установки/обновления App Store, но я не знаю, когда это загружается для приложений macOS, распространяемых за пределами App Store).
  • Кроме того, имейте в виду, что ввод универсальной ссылки в Safari не перейдет к вашему приложению: Apple заявила на форумах разработчиков2, что, по их мнению, если пользователь уже находится в среда браузера, в которой они хотят остаться, а не внезапно переходить в приложение. Поэтому, чтобы протестировать универсальную ссылку, откройте Notes.app, создайте новую заметку и введите/вставьте туда универсальную ссылку, которую хотите протестировать. Затем вы можете щелкнуть по нему, и вас спросят, хотите ли вы открыть это в своем приложении.

1) К сожалению, нет ссылки на форум разработчиков, где я это читал.

2) Опять же, извините, сейчас нет ссылки. По меньшей мере два раза видел это заявление сотрудников Apple, оба ссылались на трюк Notes. Несмотря на то, что там говорили об iOS, такое же поведение и на macOS.

person DarkDust    schedule 25.02.2020
comment
Я нигде не вижу swcd, он должен запускаться только после того, как я нажму отладку в Xcode? - person ZAD-Man; 12.10.2020
comment
На самом деле неважно, моя проблема заключалась в том, что у меня не было Safari в качестве браузера по умолчанию. - person ZAD-Man; 12.10.2020
comment
Эй, еще один вопрос в комментариях! Когда вы говорите о том, что ему трудно подобрать ассоциацию, означает ли это, что UL запускает приложение, но не запускает application(_:continue:restorationHandler:)? Это то, что происходит со мной прямо сейчас, и на самом деле это не похоже на то, что вы описываете, но я решил проверить. У меня по-прежнему ничего не появляется при поиске swcd в консоли, но я ожидаю, что на данный момент это отвлекающий маневр, теперь, когда UL открывает приложение... - person ZAD-Man; 29.10.2020
comment
@ZAD-Man: когда ваше приложение открыто, но обработчик не запущен, тогда система знает об ассоциации, и проблема, вероятно, связана с вашим приложением (например, действительно ли у обработчика правильная подпись, реализована ли она? в правильном классе, что-то в этом роде). - person DarkDust; 29.10.2020
comment
Имеет смысл, и это то, что я предполагал ... не вижу, что я мог сделать неправильно:/ - person ZAD-Man; 29.10.2020
comment
Ага! Вы наставили меня на правильный путь - в документах сказано использовать restorationHandler: @escaping ([NSUserActivityRestoring]) -> Void, но если вы просто наберете application и просмотрите параметры автозаполнения, появится restorationHandler: @escaping ([Any]) -> Void, который был вызван, когда я щелкнул UL! - person ZAD-Man; 29.10.2020
comment
У кого-нибудь это сработало? У меня также были проблемы с получением swcd для надежного повторного запроса файла. Это начало работать, когда я использовал «applinks:‹domain›?mode=developer» в macOS Catalina после удаления встроенного приложения из папки «Продукты» в Finder (похоже, swcd реагирует на это/на повторное создание двоичного файла с помощью сборка Xcode). Но мне не удалось заставить ссылку работать из приложения Notes, хотя /.well-known/apple-app-site-association кажется правильным. Мне интересно: работает ли это из Xcode? У кого-нибудь есть работающий файл apple-app-site-association? Есть советы? - person Ralf Ebert; 23.01.2021