Мы пытаемся создать файл ассоциации для веб-сайта, на котором его раньше не было.
Мы загрузили файл в https://www.our-website.com/.well-known/apple-app-site-association (как предложено в документации). К сожалению, это не сработало, ссылки по-прежнему открываются в браузере, а не в нашем приложении, и мы не можем понять, почему.
Мы попробовали запросить Apple CDN, и по какой-то причине он возвращает 404:
$ curl -v https://app-site-association.cdn-apple.com/a/v1/www.our-website.com
>
< HTTP/2 404
< apple-failure-details: {"cause":"invalid character '\u003c' looking for beginning of value"}
< apple-failure-reason: SWCERR00401 Bad JSON content
< apple-from: https://www.our-website.com/.well-known/apple-app-site-association
< apple-try-direct: false
< cache-control: max-age=3600,public
< content-type: text/plain; charset=utf-8
< via: https/1.1 dkvib1-3p-pst-001.ts.apple.com (acdn/153.14426), http/1.1 dkvib1-3p-pac-001.ts.apple.com (acdn/153.14426), https/1.1 dkvib1-3p-pfe-002.ts.apple.com (acdn/153.14426), 1.1 varnish
< cdnuuid: 1741f0c3-efb3-42fa-b574-ae3bfebb13f6-333001418
< expires: Fri, 24 May 2024 10:43:27 GMT
< accept-ranges: bytes
< age: 1693
< date: Fri, 24 May 2024 11:11:25 GMT
< x-cdn: fsly
< x-served-by: cache-bma1670-BMA
< x-cache: hit-stale, hit-fresh, hit-stale, HIT
< x-cache-hits: 0
< x-timer: S1716549085.460891,VS0,VE1
< content-length: 10
<
Not Found
Однако прямой запрос файла ассоциации возвращает 200 (мы пробовали из разных сетей, все работает нормально):
$ https://www.our-website.com/.well-known/apple-app-site-association
< HTTP/2 200
< date: Fri, 24 May 2024 11:03:15 GMT
< content-type: application/json; charset=utf-8
< content-length: 200
< cache-control: no-store
< x-varnish-director: sports_web_pro
< vary: Accept-Encoding,User-Agent
< x-cache: MISS
< x-age: 0
< age: 0
< accept-ranges: bytes
<
(json content here)
По мнению валидатора AASA, всё хорошо:
Прошло уже несколько дней, так что, надеюсь, это не проблема с кешированием. Ранее мы также пытались разместить файл на https://www.our-website.com/apple-app-site-association, но результат был тот же.
Как ни странно, диагностический инструмент на iPhone (в «Настройки» > «Разработчик») сообщает, что все в порядке:
Все это совершенно сбивает с толку, особенно сообщение о неудаче: {"cause":"invalid character '\u003c' looking for beginning of value"}. Бот CDN пытается проанализировать тело даже после получения ошибки 404? Или это кэшированный HTML-код, который был возвращен в .well-known, когда мы пытались разместить файл в корне? (поскольку '\u003c' — это открывающая угловая скобка).
У кого-нибудь есть идеи?
ОБНОВЛЕНИЕ: TN3155 предлагает запустить sudo swcutil dl -d www.our-website.com:
The operation couldn’t be completed. (SWCErrorDomain error 7.)
Я понятия не имею, что означает эта ошибка, но нахожу ссылки на ту же причину, invalid character '\u003c' looking for beginning of value.
ОБНОВЛЕНИЕ 2. Я не опубликовал содержимое файла (так как не думал, что это причина проблемы), но вот:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCDE12345.com.our-website.www",
"paths": [
"*"
]
}
]
},
"activitycontinuation": {
"apps": [
"ABCDE12345.com.our-website.www"
]
},
"webcredentials": {
"apps": [
"ABCDE12345.com.our-website.www"
]
}
}
Файл довольно простой. Я подтвердил, что это работает в режиме разработчика (когда я добавляю applinks:www.our-website.com?mode=developer в список связанных доменов). Мы также попытались разместить этот файл на промежуточном сервере (в stage-www.our-website.com он практически такой же, как и рабочий сервер), и https://app-site-association.cdn-apple.com/a/v1/stage-www.our-website.com возвращает 200, так что это, должно быть, проблема с CDN.
@matt да, права на домен настроены. Конфигурация была скопирована из другой цели в проекте, поэтому я не ожидал каких-либо проблем, но вы правы, я должен был упомянуть об этом в вопросе. Я также знаю о режиме разработки: если бы возникла проблема с содержимым файла ассоциации, это, вероятно, помогло бы его найти, но в данном случае проблема в том, что бот CDN не может найти файл (если только конечно, ошибка 404 — отвлекающий маневр).
Не могли бы вы показать (в вопросе) содержимое файла ассоциации сайта? Я всегда следовал developer.apple.com/videos/play/wwdc2020/10098 в точности, и это всегда работало.
Я буду отсутствовать у компьютера неделю или около того, обновлю вопрос, когда вернусь.
@matt Я обновил вопрос, указав в нем содержимое файла ассоциации (извините за задержку). Несмотря на то, что файл использует устаревший формат, он отлично работает в режиме разработчика и при развертывании на промежуточном сервере, что заставляет меня думать, что это проблема CDN. Мы попытаемся удалить и повторно развернуть файл и, возможно, преобразовать его в новый синтаксис, если это не поможет. В противном случае нам придется подать запрос в службу поддержки разработчиков (как только они вернутся к обработке частных запросов на поддержку после WWDC).
Цитируем из документации «Сеть доставки контента Apple запрашивает файл ассоциации apple-app-site-association для вашего домена в течение 24 часов. Устройства проверяют наличие обновлений примерно раз в неделю после установки приложения».
@derpirscher Мне бы хотелось, чтобы это было так просто, как просто подождать некоторое время, но на данный момент прошли недели.





Я бы попробовал следующие диагностические проверки:
application/json MIME.Попробуйте также следующее:
Установите для заголовка управления кешем значение Cache-Control: public, max-age=0.
Удачи!
Мы нашли виновника: сервер, на котором размещен файл ассоциации, обертывал содержимое файла в HTML, если пользовательский агент содержал слово «бот» (и возвращал правильный JSON для веб-браузеров и Curl). И, конечно же, бот CDN отправляет запрос с помощью User-Agent: AASA-Bot/*:
curl -A "AASA-Bot/*" https://www.our-website.com/.well-known/apple-app-site-association
<html><head><meta name = "color-scheme" content = "light dark"></head><body><pre style = "word-wrap: break-word; white-space: pre-wrap;">{
"applinks": {
"apps": [],
"details": [
{
"appID": "ABCDE12345.com.our-website.www",
"paths": [
"*"
]
}
]
},
"activitycontinuation": {
"apps": [
"ABCDE12345.com.our-website.www"
]
},
"webcredentials": {
"apps": [
"ABCDE12345.com.our-website.www"
]
}
}</pre></body></html>
Вот откуда взялась открывающаяся угловая скобка, на которую жаловался бот.
Как только проблемная часть логики была обновлена, все заработало как положено.
«Мы загрузили файл на наш-сайт.com/.well-known/apple-app-site-association» Ну, это не единственное, что вам нужно сделать, чтобы подготовить свое приложение к универсальные ссылки. Вы также должны предоставить своему приложению право на домен. Ты сделал это? Если да, то почему в вашем вопросе это не упоминается? Плюс, вы понимаете, как обойти кеширование, чтобы протестировать свои универсальные ссылки во время разработки?