IOS9: Universal Links не работает

Итак, я последовал за учебником https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9 и использовал те же значения, что и тот, который был предоставлен.

Файл ассоциации Apple также готов в каталоге ссылок: WEB_PAGE: PORT_NUMBER/яблоко-приложение-сайт-ассоциации

Кажется, что все настроено на этой стороне.

Я добавил права, обновил профиль подготовки и все настройки.

Когда я запускаю приложение на своем устройстве и открываю ссылку http://WEB_PAGE:PORT_NUMBER, это всегда открывает Safari.

У меня даже есть точки останова в следующих методах:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler

Но zilch.

Кто-нибудь усовершенствовал это? Есть что-то, что я пропустил?

Ответ 1

Есть несколько возможных проблем.

  • Попробуйте вставить свой домен в это средство проверки ссылок и убедитесь, что нет проблем: 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, Mail, Slack и т.д.) Сработало. Другие сообщили, что нажатие ссылок в результатах поиска Google открыло приложение напрямую.

  • Обратите внимание, что если Universal Link успешно открывает ваше приложение, а затем вы переходите к Safari (нажав на свой сайт в верхнем правом углу панели навигации в приложении), iOS перестает открывать при посещении этого URL. Затем в Safari вы можете потянуть вниз, чтобы открыть баннер в верхней части страницы с помощью "Открыть". Я потратил много времени на это. Обратите внимание, что нажатие на сайт = > отключение UL кажется определенным контуром на основе путей, которые вы указываете в файле привязки приложения apple-app-site. Поэтому, если у вас есть отдельные маршруты, yoursite.com/a/* и yoursite.com/b/*, если вы нажмете yoursite.com/a/* и он откроет ваше приложение напрямую, тогда у вас есть опция в правом верхнем углу приложения, чтобы перейти к yoursite.com/a/*. Если вы это сделаете, последующие посещения yoursite.com/a/* откроются в браузере, а не в приложении. Тем не менее, yoursite.com/b/* не должен быть затронут и по-прежнему открыть ваше приложение напрямую.

Сообщите мне, узнаете, в чем проблема. Мне лично очень интересно, как работают Universal Links и какие крайние случаи существуют. Удачи.

Ответ 2

Есть много способов, чтобы это могло пойти не так. Два момента вызвали у меня проблемы:

  • В Xcode, когда вы добавляете право Associated Domains, каждая запись должна начинаться с applinks:, а затем с вашим доменным именем. Например. applinks:www.apple.com.

  • Хотя Xcode создал файл прав для меня, он не включался в мою сборку: я должен был вручную щелкнуть это поле.

И да, после этого нет необходимости подписывать файл apple-app-site-association: это просто текст, и он работает, пока он обслуживает HTTPS. (Вам все равно придется подписывать его, если вы поддерживаете iOS 8.)

Ответ 3

По всей видимости, ошибка в документации для создания файла ассоциации для Universal Links.

Где он говорит:

Значение ключа appID - это идентификатор команды приложений и идентификатор пакета

он должен сказать

Значение ключа appID - это префикс приложений и идентификатор пакета

Для большинства приложений кажется, что идентификаторы Team ID и приложения одинаковы, но если ваше приложение уже много лет находится в магазине, эти значения могут быть разными.

Чтобы найти это значение, откройте Центр Member на https://developer.apple.com и посмотрите "Сертификаты, идентификаторы и профили", нажмите "Идентификаторы", затем "Идентификаторы приложений" "в таблице под "Идентификаторы". Найдите свое приложение и используйте значение префикса и идентификатор Bundle для создания вашего AppID для файла ассоциации.

Ответ 4

St.derrick Answer является информативным.

Но чтобы снова включить универсальные ссылки для открытия в приложении вместо сафари, нам нужно сделать следующее.

  • Долгое нажатие на универсальную ссылку в Mail или iMessage, вы увидите варианты открытия в сафари или в приложении.

Ответ 5

Чтобы отладить эту проблему, выполните поиск "swcd" на выходе консоли вашего устройства при установке приложения, чтобы проверить, не работает или не выполняется регистрация вашей универсальной ссылки.

  • Используйте фактическое устройство, а не симулятор.
  • Удалите приложение с вашего устройства.
  • Подключите устройство к компьютеру и просмотрите вывод консоли устройства в xcode. (окно → устройства → [ваше устройство] → просмотр журналов устройств). Сохраните это окно.
  • Установите приложение и включите его.
  • Отфильтруйте вывод консоли на "swcd". Если это будет успешно, вы увидите что-то вроде следующего скриншота. Если это не удастся, вы увидите что-то еще. Если вы ничего не видите, вы примете что-то фундаментальное, например, добавление права Ассоциированных доменов.

Успешно добавлена ​​утилита

Ответ 7

Я понял, что для меня проблема заключалась в том, что ссылки на корневой каталог a (например. http://example.com/) не открывали мое приложение, но если я добавил путь (например. http://example.com/mypath), он сработал. Добавление "/" в список путей sovled it:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAM_ID.BundleIdentifier",
                "paths": [ "*", "/" ]
            }
        ]
    }
}

Как ответил slutsker в этот форум разработчиков Apple.

Ответ 8

Быстрые шаги для проверки правильности реализации Universal Link.

  • Нажмите и удерживайте ссылку, которую вы ожидаете запустить. Вы должны увидеть "Открыть в [ваше имя приложения]" в контекстном меню.

  • Откройте приложение "Заметки", введите ссылку, которую вы ожидаете открыть. Нажмите "Готово". Ссылка станет желтой, и нажатие на ссылку должно открыть ваше приложение, а не Safari.

  • Если ссылка http://yourDomain.com не запускает приложение, попробуйте http://yourDomain.com/yourFolder/

  • В Safari, если в контекстном меню отображается "Открыть в [ваше имя приложения]" в сафари, но нажатие ссылки открывает ссылку в сафари, а не запуск приложения,

    а. Попробуйте потянуть вниз страницу сафари, которая открылась, когда была нажата ссылка, например, как вы пытаетесь обновить ". Должен появиться баннер, который может открыть ваше приложение. Нажмите баннер, чтобы открыть приложение, закройте приложение, нажав кнопку" домой", вернитесь в сафари и попробуйте запустить приложение, снова нажав на ссылку. На этот раз приложение должно быть запущено, потому что нажатие на баннер должно было сохранить предпочтение, чтобы открыть ссылку в приложении.

    б. Если приложение по-прежнему не запускается после шага a., Попробуйте отправить ссылку на веб-почту, такую ​​как gmail, и откройте сайт веб-почты в сафари и попробуйте нажать ссылку. Если это работает, возможно, вы пытались запустить приложение из того же домена, что и ссылка. Из того, что я видел, запуск приложения из одного домена в основном не работает. Вероятно, сафари не захотят проверить, является ли целевой URL универсальной ссылкой, когда ссылка находится в том же домене, в котором находится пользователь. Поэтому попробуйте запустить приложение из другого домена.

Ответ 9

Также очень важно увеличить версию проекта или номер сборки после интеграции универсальных ссылок. Даже если вы удалите/переустановите, iOS не будет загружать ссылки, если вы не столкнетесь с версией.

Ответ 10

  • Универсальные ссылки не будут работать, если вы вставляете ссылку в поле URL-адреса браузера.

  • Universal Links работают с управляемым пользователем <a href="..."> элементом щелчка по доменам. Пример: если есть универсальная ссылка на google.com, указывающая на bnc.lt, она откроет приложение.

  • Universal Links не будет работать с элементом <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

3-я пуля стоила мне около дня, чтобы понять.

Ответ 11

Если люди ищут другие решения, мы собрали целый шаг за шагом по отладке Universal Links, поскольку мы видели много проблем, вызывающих много головных болей.

Проверьте это:

Руководство по отладке универсальных ссылок

Предварительный просмотр руководства по отладке

Если вы просто хотите настроить Universal Links fresh, это руководство действительно полезно:

Руководство по настройке глубокой привязки iOS

Надеюсь, что они будут полезны!

Ответ 12

Просто подумал, что добавлю некоторые вещи, которые я обнаружил, если больше людей столкнутся с теми же проблемами, что и я в будущем. Они в основном связаны с ошибками проверки подлинности.

Несмотря на то, что Apple явно не заявляет об этом, файл apple-app-site-association должен обслуживаться через https, даже если он подписан. Сертификат, используемый для https, также должен доверять apple. Поэтому, пока сертификат, добавленный к устройству в Настройках → Общие → Профили, позволит https в сафари, он не позволит универсальным ссылкам работать.

В журналах устройств при ошибке аутентификации между устройством и сервером будет напечатано значение, например "TrustResultValue" : 4. A TrustResultValue из 5 означает, что сертификат предназначен для неправильного домена (например, test.com, который можно найти на сайте www.test.com). A TrustResultValue of 4 означает, что для этого использования сертификат не доверен.

Здесь могут быть некоторые полезные шаги для отладки здесь. Раздел "Тестирование доступа к apple-app-site-association" - это пошаговое руководство по обеспечению того, чтобы устройство получало файл apple-app-site-association. Шаги сводятся к следующему:

  • Удалите приложение. Это необходимо, потому что файл загружается при установке.

  • Остановить сервер должным образом apple-app-site-association.

  • В xcode откройте "Окно" → "Устройства", а затем выберите ваше устройство.

  • Откройте журналы устройств, щелкнув треугольник в нижней части окна.

  • Очистите журналы, щелкнув мусорную корзину, чтобы удалить все предыдущие журналы, которые могут быть связаны.

  • Переустановите приложение с помощью xcode, нажав кнопку воспроизведения.

  • После запуска приложения, если устройство правильно запрашивает файл, в журналах устройства должна содержаться ошибка, которая может быть найдена путем поиска "apple-app-site-association".

Если файл apple-app-site-association правильно обслуживается (шаг 2 отсутствует), то ошибки не должно быть. Ошибка проверки подлинности может быть отображена, если это проблема.

Ответ 13

Самая распространенная причина - когда пользователь нажимает верхнюю правую сторону, тем самым сообщая iOS НЕ открывать приложение (в данном случае Uber) в будущем.

Чтобы исправить, потяните вниз, чтобы открыть смарт-баннер, и коснитесь OPEN:

Сдвиньте в Safari и снова откройте

Это впоследствии "запомнит", чтобы открыть приложение.

Ответ 14

Для тех, кому необходимо легко проверить открывающиеся (универсальные) ссылки, вы также можете открыть ссылку в своем симуляторе с терминала с помощью этой команды:

xcrun simctl openurl booted yourapp_or_http://yourlink

например:

xcrun simctl openurl booted https://www.google.com

Ответ 15

Мне удалось заставить его работать, но потребовалось довольно много времени и борьбы. Обратите внимание, что , если вы не подписываете apple-app-site-association файл (подпись не обязательна!) Нажатие на ссылку в Safari не откроет ваше приложение (это вызвало у меня много головной боли).

Ответ 16

Принял меня близко к дню, чтобы понять это. Проблема, с которой я столкнулся, не загружала обновленные профили подготовки в XCode (я также перезапустил XCode после этого).

(Предпочтения > Учетные записи > Просмотр сведений > Загрузка всего)

Ответ 18

Мы добавили файл apple-app-site-association в это место:

https://example.com/apple-app-site-association

В iOS 9 он работал нормально, но на iOS 10 он не работал.

Оказалось, что проблема связана с хорошо известным:

https://example.com/.well-known/apple-app-site-association

Из-за https://example.com/.well-known/apple-app-site-association путь перенаправлен на https://example.com

<Notice>: Allowing redirect 'https://example.com/.well-known/apple-app-site-association' -> 'https://example.com/'
<Notice>: ### Rejecting AASA file size 154466 for URL https://example.com/.well-known/apple-app-site-association

По-моему, если какой-то известный путь не работает правильно, он нарушает универсальные ссылки.

Ответ 19

Перейдите на страницу developer.apple.com и отредактируйте один из ваших профилей распространения. На странице редактирования вы можете открыть всплывающее окно для идентификаторов приложений, в котором будут отображаться список ваших имен приложений и() круглых скобок за именем приложения. показывает все ваши реальные идентификаторы приложений. Некоторые приложения могут иметь идентификатор вашей команды в качестве префикса, а некоторые - нет. Не забудьте использовать именно то, что вы видите в этом всплывающем меню внутри(), и поместите его в поле appID для приложения apple-app-site-association. У меня была именно эта проблема с приложением и его универсальными ссылками.

Ответ 20

Проблема для меня оказалась файлом apple-app-site-association. Согласно документации Apple, требуется только параметр applands. Я добавил параметр activitycontinuation, и он сработал.

{
  "activitycontinuation": {
    "apps": [
      "9JA89QQLNQ.com.apple.wwdc"
    ]
  },
  "applinks": {
    "apps": [],
    "details": [{
        "appID": "9JA89QQLNQ.com.apple.wwdc",
        "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
      }]
  }
}

Ответ 21

На самом деле не видел точно такую ​​же комбо-версию проблемы/решения, которая заставила ее работать для меня, так что, возможно, также добавит мою уязвимость, у кого-то такая же проблема!

Для моего приложения я использую настраиваемую схему URL (установленную в APP_TARGET > Info > URL Types) и устанавливаю схему URL здесь, в консоль Firebase, чтобы соответствовать, но все еще не работал.

Моя проблема была на самом деле двумя проблемами:

Остерегайтесь проверки автоматической подписи

Если вы проверяете Xcode "Автоматически управлять подписью", как и я, поскольку я просто пытался сделать быстрое демонстрационное приложение, вам нужно будет убедиться, что используемый TeamID соответствует тому, который находится в консоли Firebase. Сначала я отправился на свою учетную запись Apple Developer и скопировал идентификатор команды с моей страницы членства, но позже увидел, что фактический идентификатор, используемый 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 у меня не было проблем открыть мои динамические ссылки.

Ответ 22

Если вы размещаете свою apple-app-site-association в Firebase, обязательно поместите ее в подкаталог /.well-known/ ! Похоже, что Xcode сначала запрашивает этот URL-адрес, и, если он успешно выполняется, он не пытается запросить связь apple-app-site-association в корневом каталоге. По какой-то причине инженеры Firebase заставили размещенные веб-сайты автоматически отвечать на /.well-known/apple-app-site-association пустым (но правильно сформированным) файлом ассоциации, который переопределяет ваш пользовательский, оставляя вас без понятия, почему ничего работает!

Ответ 23

Для меня моя ошибка заключалась в том, что наш сайт перенаправлял www.domain.com на домен .com, поэтому из-за этого все из-за этого не пострадают. Надеюсь, что это поможет.

Ответ 24

Через два дня мне оказалось, что эти связи (из ветки)

applinks: xxxx.app.link

работает только после того, как приложение Архивирования (также Ad-hoc) и установит его на телефон.

Ответ 25

Я смог протестировать Universal Links в iOS Simulator, используя приложение "Календарь".

Я только что создал событие и добавил URL-адрес, который я хотел проверить, в поле события URL. Затем, при просмотре созданного события, вы можете просто нажать на ссылку URL, и ваше приложение должно открыть.

Ответ 26

После двух дней полного отчаяния я думаю, что наконец-то все исправил. Вот мое решение:

Кажется, что старые приложения используют другой префикс приложения, чем новые приложения. Новые приложения используют только Team ID для этой цели. Если префикс приложения и идентификатор команды не идентичны, то вам необходимо указать поле продолжения действия в файле ассоциации сайта приложения Apple:

{
    "activitycontinuation": {
        "apps": [
            "YOUR_APP_PREFIX.de.company.app"
        ]
   },
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "YOUR_APP_PREFIX.de.company.app",
        "paths": ["/*"]
      }
    ]
  }
} 

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

Ответ 27

Для будущих читателей, которые находят эту страницу...

У меня была аналогичная ситуация. Тем не менее, в моей ситуации iOS10 работал с AOK, и независимо от того, что я сделал (bump build numbers, delete/reinstall и т.д.), 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.

Ответ 28

В моем случае моя ошибка заключалась в том, чтобы поместить параметры запроса в пути:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAM_ID.BundleIdentifier",
                "paths": [ "/auth-ui/hub?target=confirm&*" ]
            }
        ]
    }
}

когда я удаляю '? target = confirm & *' из путей, он начинает работать

Ответ 29

В моем случае запрос на файл AASA по адресу: https://example.com/apple-app-site-association

Был перенаправлен на: https://www.example.com/apple-app-site-association

Кикер - это отлично работает на iOS 11, но не работает на iOS 9.3.5. Идите фигуру.

Решение. Файл apple-app-site-association файл apple-app-site-association НЕ ДОЛЖЕН быть за перенаправлением 302 или 301 для iOS 9. (Справедливости ради отметим это на странице устранения неполадок UL.)

Ответ 30

Для меня, после реализации всех ответов сверху и проверки того, что файл AASA действительно загружался с ответом mpoisot, моя проблема заключалась в том, что в Xcode я добавил связанный домен как:

applinks:example.com

и в моем приложении заметок я пытался использовать:

Https://example.com

потому что мой AASA не подписан, и я хотел убедиться, что я обслуживаю его через HTTPS. Это сработало, когда в моем приложении заметок я попытался использовать:

 example.com

Это работает для меня на физическом устройстве, используя iOS 12.1.2 с компоновкой разработки из Xcode или компоновкой дистрибутива из Testflight