Поэтому я точно следовал этому руководству и использовал те же значения, что и предоставленные: https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9
Файл ассоциации Apple также готов в каталоге ссылок:
WEB_PAGE:PORT_NUMBER/apple-app-site-association
Вроде бы все на этой стороне настроено.
Я добавил права, обновил профиль обеспечения и все настроено.
Когда я запускаю приложение на своем устройстве и открываю ссылку http://WEB_PAGE:PORT_NUMBER
, всегда открывается Safari.
У меня даже есть точки останова в следующем методе:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler
Но пшик.
Кто-нибудь усовершенствовал это? Что-то мне не хватает?
ios
objective-c
xcode
ios9
ios-universal-links
Леголас
источник
источник
Ответы:
Есть несколько возможных проблем.
Попробуйте вставить свой домен в этот валидатор ссылок и убедитесь, что нет проблем: https://limitless-sierra-4673.herokuapp.com/ (кредит ShortStuffSushi - см. Репо )
iOS регистрирует сообщение об ошибке в системных журналах, если у вас неправильно настроен TLS в домене, указанном в ваших правах. Он хранится в журналах ОС, а не в журналах приложений. Сообщение об ошибке будет выглядеть так
Sep 21 14:27:01 Derricks-iPhone swcd[2044] <Notice>: 2015-09-21 02:27:01.878907 PM [SWC] ### Rejecting URL 'https://examplecustomdomain.com/apple-app-site-association' for auth method 'NSURLAuthenticationMethodServerTrust': -6754/0xFFFFE59E kAuthenticationErr
. Сообщение об ошибке получено отсюда , краткие (неполные) инструкции по использованию CloudFlare для TLS здесь .В моем личном тестировании щелчок / ввод ссылки в Safari ни разу не открывал приложение напрямую. Щелкнув из других приложений (IMessage, электронная почта, расслабленные и т.д.) уже работал. Другие сообщили, что нажатие на ссылки в результатах поиска Google открывало приложение напрямую.
Обратите внимание, что если универсальная ссылка успешно открывает ваше приложение, а затем вы переходите к Safari (нажав свой сайт в правом верхнем углу панели навигации в приложении), iOS перестает открывать приложение, когда вы посещаете этот URL . Затем в Safari вы можете потянуть вниз, чтобы в верхней части страницы появился баннер с надписью «Открыть». Я потратил на это много времени. Обратите внимание, что переход к сайту => отключение UL кажется специфичным для пути , основанного на путях, которые вы указываете в файле привязки яблочного приложения-сайта. Так что, если у вас есть отдельные маршруты,
yoursite.com/a/*
иyoursite.com/b/*
если вы щелкнете,yoursite.com/a/*
и оно откроет ваше приложение напрямую, у вас будет возможность в правом верхнем углу приложения щелкнутьyoursite.com/a/*
. Если вы это сделаете, последующие посещенияyoursite.com/a/*
откроется в браузере, а не в приложении. Тем не менее,yoursite.com/b/*
это не должно повлиять на это и по-прежнему открывать ваше приложение напрямую.Дайте мне знать, если вы обнаружите, в чем проблема. Мне лично очень любопытно, как работают универсальные ссылки и какие существуют крайние случаи. Удачи.
источник
Это может пойти не так, как надо. Два момента вызвали у меня проблемы:
В Xcode, когда вы добавляете право на связанные домены, каждая запись должна начинаться с
applinks:
вашего доменного имени. Напрapplinks:www.apple.com
.Хотя Xcode создал для меня файл прав, он не был включен в мою сборку: мне пришлось щелкнуть это поле вручную.
И да, после этого не нужно было подписывать
apple-app-site-association
файл: это простой текст, и он работает, пока обслуживается по HTTPS. (Однако вам все равно нужно будет подписать его, если вы поддерживаете iOS 8.)источник
Очевидно, есть ошибка в документации по созданию файла ассоциации для универсальных ссылок .
Где сказано:
он должен сказать
Для большинства приложений кажется, что идентификатор группы и префиксы приложений совпадают, но если ваше приложение находится в магазине много лет, эти значения могут отличаться.
Чтобы найти это значение, откройте Центр участников на https://developer.apple.com и посмотрите «Сертификаты, идентификаторы и профили», нажмите «Идентификаторы», затем «Идентификаторы приложений» в таблице под «Идентификаторами». Найдите свое приложение и используйте там значение префикса и идентификатор пакета, чтобы создать свой AppID для файла ассоциации.
источник
Чтобы помочь в устранении этой проблемы, при установке приложения найдите «swcd» в выводе консоли вашего устройства, чтобы узнать, сработала ли регистрация универсальной ссылки.
источник
Ответ Сентдеррика информативен.
Но чтобы снова включить универсальные ссылки для открытия в приложении вместо сафари, нам нужно сделать следующее.
источник
app
только копировать, открывать, добавлять в список для чтения и т. Д.Для проверки
apple-app-site-association
на стороне сервера вы можете использовать официальный валидатор Apple.https://search.developer.apple.com/appsearch-validation-tool/
источник
Я понял, что проблема для меня заключалась в том, что ссылки на корневой каталог (например
http://example.com/
) не открывали мое приложение, но если я добавил путь (напримерhttp://example.com/mypath
), он работал. Добавление"/"
в список путей сравняло его:Как ответил slutsker в этой ветке форумов разработчиков Apple.
источник
Быстрые шаги, чтобы проверить, правильно ли вы внедрили Universal Link.
Нажмите и удерживайте ссылку, по которой вы ожидаете запустить приложение. Вы должны увидеть «Открыть в [название вашего приложения]» в контекстном меню.
Откройте приложение Notes, введите ссылку, по которой вы хотите открыть приложение. Коснитесь Готово. Ссылка станет желтой, и нажатие на нее должно открывать ваше приложение, а не Safari.
Если ссылка http://yourDomain.com не запускает приложение, попробуйте http://yourDomain.com/yourFolder/
В Safari, если в контекстном меню в сафари отображается «Открыть в [название вашего приложения]», но нажатие на ссылку открывает ссылку в самом сафари вместо запуска приложения,
а. Попробуйте потянуть вниз страницу сафари, которая открывалась при нажатии на ссылку, как при нажатии кнопки «обновить». Должен появиться баннер, который может открыть ваше приложение. Коснитесь баннера, чтобы открыть приложение, закройте приложение, нажав кнопку «Домой», вернитесь в сафари и попробуйте запустить приложение, снова нажав ссылку. На этот раз приложение должно запуститься, потому что нажатие на баннер должно было сохранить настройку открытия ссылки в приложении.
б. Если приложение по-прежнему не запускается после шага а., Попробуйте отправить ссылку на веб-почту, такую как gmail, откройте сайт веб-почты в Safari и попробуйте щелкнуть ссылку. Если это сработает, возможно, вы пытались запустить приложение из того же домена, что и ссылка. Из того, что я видел, запуск приложения из того же домена в основном не выполняется . Вероятно, safari не будет проверять, является ли целевой URL универсальной ссылкой, когда ссылка находится в том же домене, в котором находится пользователь. Поэтому попробуйте запустить приложение из другого домена.
источник
Также очень важно увеличивать версию проекта или номер сборки после интеграции универсальных ссылок. Даже если вы удалите / переустановите, iOS не получит ссылки, пока вы не обновите версию.
источник
apple-app-site-association
которой был неправильный префикс appIdДля тех, кому нужно легко протестировать открытие (универсальных) ссылок, вы также можете открыть ссылку в своем симуляторе из терминала с помощью этой команды:
xcrun simctl openurl booted yourapp_or_http://yourlink
например:
xcrun simctl openurl booted https://www.google.com
источник
Универсальные ссылки не будут работать, если вы вставите ссылку в поле URL-адреса браузера.
Универсальные ссылки работают с пользовательским
<a href="...">
щелчком элемента в разных доменах . Пример: если на сайте google.com есть универсальная ссылка, указывающая на bnc.lt, приложение откроется.Универсальные ссылки не будут работать, если
<a href="...">
элемент, управляемый пользователем, щелкнет в том же домене . Пример: если на google.com есть универсальная ссылка, указывающая на другую универсальную ссылку на google.com, приложение не откроется.Универсальные ссылки не могут быть запущены через Javascript (в window.onload или через вызов .click ()
<a>
элемента), если это не является частью действия пользователя.источник: https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links
На то, чтобы разобраться с третьей пулей, у меня ушло около дня.
источник
Если люди здесь ищут другие решения, мы составили целую пошаговую инструкцию по отладке универсальных ссылок, так как мы видели множество всплывающих проблем, вызывающих МНОГО головных болей.
Проверить это:
Руководство по отладке универсальных ссылок
Если вы просто хотите настроить Universal Links в свежем виде, это руководство действительно поможет:
Руководство по настройке iOS Deep Linking
Надеюсь, они будут полезны!
источник
Просто подумал, что добавлю кое-что, что обнаружил, на случай, если больше людей столкнутся с теми же проблемами, что и я, в будущем. В основном это связано с ошибками аутентификации.
Хотя в Apple это прямо не указано,
apple-app-site-association
файл должен обслуживаться по https, даже если он подписан. Сертификат, используемый для https, также должен быть доверенным для Apple. Таким образом, хотя сертификат, добавленный к устройству в разделе «Настройки» -> «Общие» -> «Профили», разрешит использование https в сафари, он не позволит универсальным ссылкам работать.В журналах устройства при ошибке аутентификации между устройством и сервером будет напечатано значение типа
"TrustResultValue" : 4
. ЗначениеTrustResultValue
5 означает, что сертификат предназначен для неправильного домена (например, test.com обслуживается с www.test.com). АTrustResultValue
4 означает, что сертификат не является доверенным для этого использования.Там могут быть некоторые полезные шаги для отладки здесь . Раздел «Тестирование доступа к ассоциации приложения-приложения-сайта-приложения» представляет собой пошаговое руководство, как убедиться, что устройство получает
apple-app-site-association
файл. Шаги сводятся к следующему:Удалите приложение. Это необходимо, поскольку файл загружается при установке.
Остановите сервер от правильного обслуживания
apple-app-site-association
.В xcode откройте Window -> Devices и затем выберите свое устройство.
Откройте журналы устройства, щелкнув треугольник в нижней части окна.
Очистите журналы, щелкнув корзину, чтобы очистить все предыдущие журналы, которые могут быть связаны.
Переустановите приложение с помощью xcode, нажав кнопку воспроизведения.
После запуска приложения, если устройство правильно запрашивает файл, журналы устройства должны содержать ошибку, которую можно найти, выполнив поиск по запросу «apple-app-site-association».
Если
apple-app-site-association
файл обслуживается правильно (шаг 2 пропущен), ошибки быть не должно. Вместо этого может отображаться ошибка аутентификации, если это проблема.источник
Наиболее частая причина - это когда пользователь нажимает в правом верхнем углу, тем самым говоря iOS НЕ открывать приложение (в данном случае Uber) в будущем.
Чтобы исправить это, потяните вниз, чтобы открыть смарт-баннер, и нажмите ОТКРЫТЬ:
Впоследствии он будет «помнить» об открытии приложения.
источник
Мы добавили файл ассоциации яблочного приложения-сайта в это место:
На iOS 9 он работал нормально, но на iOS 10 не работал.
Оказалось, что проблема связана с известным путем.
Из-за https://example.com/.well-known/apple-app-site-association путь перенаправлен на https://example.com
На мой взгляд, если по какой-то причине. Хорошо известный путь работает некорректно, он разрывает универсальные ссылки.
источник
Мне удалось заставить это работать, но это заняло довольно много времени и усилий. Обратите внимание, что если вы не подписываете
apple-app-site-association
файл (подпись необязательно!), Нажатие на ссылку в Safari не откроет ваше приложение (это вызвало у меня много головной боли).источник
activitycontinuation
свойство вapple-app-site-association
файл json. developer.apple.com/library/ios/documentation/UserExperience/…У меня ушло около дня, чтобы понять это. Проблема, с которой я столкнулся, заключалась в том, что не загружались обновленные профили обеспечения в XCode (после этого я также перезапустил XCode).
источник
Из Руководства по программированию поиска приложений: Поддержка универсальных ссылок
источник
Через два дня у меня выяснилось, что эти ссылки (из ветки)
работать только после Архивации (тоже Ad-hoc) приложения и установки на телефон.
источник
Если вы размещаете свой сервер
apple-app-site-association
на Firebase , обязательно поместите его в/.well-known/
подкаталог! Похоже, что Xcode сначала запрашивает этот URL-адрес, и в случае успеха не пытается запроситьapple-app-site-association
в корневом каталоге. По какой-то причине инженеры firebase заставили размещенные веб-сайты автоматически отвечать/.well-known/apple-app-site-association
пустым (но правильно сформированным) файлом ассоциации, который переопределяет ваш собственный, и вы не понимаете, почему ничего не работает!источник
Перейдите на developer.apple.com и отредактируйте один из ваших профилей распространения. На странице редактирования вы можете открыть всплывающее окно для идентификаторов приложений, в котором будет отображаться список имен ваших приложений, а в круглых скобках () после имени приложения будут показаны все ваши настоящие идентификаторы приложений . В некоторых приложениях в качестве префикса может быть указан идентификатор вашей команды, а в некоторых нет . Убедитесь, что вы используете именно то, что вы видите во всплывающем меню внутри (), и поместите его в поле appID с данными о привязке яблочного приложения-сайта. У меня была именно такая проблема с приложением и его универсальными ссылками.
источник
Проблема для меня оказалась в
apple-app-site-association
файле. Согласно документации Apple, требуется только параметрappinks. Я добавилactivitycontinuation
параметр, и он сработал.источник
activitycontinuation
- вот что исправило это для нас.На самом деле я не видел ту же самую комбинацию проблема / решение, которая заставила его работать для меня, так что можно добавить мое, если у кого-то такая же проблема!
Для своего приложения я использую настраиваемую схему URL-адресов (установленную в
APP_TARGET > Info > URL Types
) и устанавливаю схему URL-адресов отсюда в консоли Firebase для соответствия, но все еще не работает.Моя проблема заключалась в двух проблемах:
Следите за тем, чтобы установить флажок "Автоматически управлять подписью"
Если вы проверяете параметр Xcode «Автоматически управлять подписью», как и я, поскольку я просто пытался создать быстрое демонстрационное приложение, вам нужно убедиться, что используемый TeamID совпадает с идентификатором в вашей консоли Firebase. Первоначально я зашел в свою учетную запись разработчика Apple и скопировал идентификатор команды со страницы членства, но позже увидел, что фактический идентификатор, используемый Xcode, был другим. (Вы можете найти это в
APP_TARGET > General > Signing > Signing Certificate.
Для меня это выглядело такiPhone Developer: My Name (TEAM_ID)
).Приставьте свой TeamID к идентификатору пакета в типах URL
После того, как я убедился, что они совпадают в моей консоли Firebase и Xcode, моей следующей проблемой стал идентификатор для моей схемы URL. Обычно здесь используется идентификатор вашего пакета, но Firebase фактически добавляет ему идентификатор группы, который вы указали в консоли Firebase, поэтому мне также пришлось добавить его к идентификатору в разделе типов URL-адресов в Xcode.
После этих двух исправлений и повторной загрузки
GoogleService-Info.plist
файла у меня не было проблем с открытием моих динамических ссылок.источник
После двух дней полного отчаяния, думаю, я наконец исправил это. Вот мое решение:
Кажется, что старые приложения используют другой префикс приложения, чем новые приложения. В новых приложениях для этой цели используется только идентификатор группы. Если префикс приложения и идентификатор группы не идентичны, похоже, вам нужно указать поле продолжения активности в файле ассоциации сайта приложения Apple:
Еще одна вещь, которую я испытал во время своей адской поездки, заключалась в том, что удаление приложения и перезапуск устройства, кажется, единственный способ принудительно обновить этот файл.
источник
Для меня моя ошибка заключалась в том, что наш сайт перенаправляет www.domain.com на domain.com, поэтому из-за этого все www.domain.com/* не сработают. Надеюсь, это поможет.
источник
Мне удалось протестировать универсальные ссылки в симуляторе iOS с помощью приложения «Календарь».
Я только что создал событие и добавил URL-адрес, который хотел протестировать, в поле события
URL
. Затем при просмотре созданного события вы можете просто нажать на URL-ссылку, и ваше приложение должно открыться.источник
Потратив день на попытки заставить это работать, перезагрузка телефона решила проблему.
Удаление / повторная установка приложения тоже не сработало.
источник
Для ios13 появился новый формат - посмотрите здесь https://developer.apple.com/documentation/safariservices/supporting_associated_domains_in_your_app?language=objc
Я обновил свой файл, чтобы он выглядел так:
источник
"exclude": true
кcomponents
объекту, чтобы оноcomment
было правдойДля будущих читателей, которые найдут эту страницу ...
У меня была похожая ситуация. Однако в моей ситуации iOS10 работала в режиме AOK, и что бы я ни делал (увеличивать номера сборок, удалять / переустанавливать и т. Д.), IOS9, казалось, отказывался работать.
Я пришел к этому с iOS10, и мне нужно было поддерживать iOS9. В то время в документации здесь - https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html - четко указано, что файл может быть размещен в корне веб-сервера. (например
/apple-app-site-association
) или в хорошо известной папке (например/.well-known/apple-app-site-association
). Поскольку я также поддерживаю Android, который также использует хорошо известную папку для аналогичного файла, я решил поместить туда обе.При новой установке на iOS10 он явно запрашивает корневой файл, терпит неудачу, затем запрашивает хорошо известный файл и завершается успешно.
Для iOS9 он явно запросил корневой файл, не работает и больше ничего не делает.
Решение: если вы поддерживаете iOS9, поместите файл по адресу
/apple-app-site-association
.источник
В моем случае моя ошибка заключалась в том, чтобы поместить параметры запроса в пути:
когда я удаляю '? target = confirm & *' из путей, он начинает работать
источник