iOS универсальные ссылки с подстановочными знаками не работают
В приложении для iOS, над которым я работаю, я установил Universal Links. Приложение содержит несколько доменов. Некоторые домены, которые я настроил с подстановочными знаками. Эти домены, похоже, не работают. Например, я хочу ссылку на https://news.mydomain.com/
, Если я добавлю следующее в список связанных доменов:
applinks:*.mydomain.com
-> не работает
applinks:news.mydomain.com
-> отлично работает
Поэтому я считаю, что все настроил правильно, файл apple-app-site-association настроен нормально. Я даже вижу, что в обоих случаях (с использованием Charles Proxy) файл apple-app-site-association получен нормально.
В случае подстановочного знака ссылка открывается только в Safari.
Когда я настраиваю домен без подстановочного знака, приложение открывается.
Я что-то здесь упускаю? Я использую iOS 9.3.2 на устройстве и использую Xcode 7.3.1, которые на сегодняшний день являются самыми последними версиями.
4 ответа
Я добавил свои выводы в эту ветку: https://forums.developer.apple.com/thread/47315
Короче говоря, даже в iOS 10 кажется, что для подстановочных знаков требуется, чтобы apple-app-site-association
файл будет обслуживаться корнем подстановочного знака.
Например, если вы хотите использовать *.domain.com
тогда apple-app-site-association
должен быть размещен на обоих, например, app1.domain.com
а также domain.com
иначе это не будет работать с простым указанием applinks:*.domain.com
в Xcode.
Это прискорбно, если ваш основной сайт размещен на www.domain.com
и что у вас есть перенаправление 301 на domain.com
(который перенаправляет вас на www.domain.com
), потому что универсальные ссылки не разрешают перенаправления.
Обходной путь, который я нашел, заключался в создании основного субдомена для вашего приложения и использовании субдоменов для подстановочного знака. Например
app.domain.com
(должен служитьapple-app-site-association
файл)server1.app.domain.com
(должен служитьapple-app-site-association
)server2.app.domain.com
(...)
Таким образом, в Xcode вы можете указать только applinks:*.app.domain.com
и Universal Links будут работать без необходимости указывать server1.app.domain.com
, server2.app.domain.com
и так далее... в Xcode.
Обратите внимание, однако, что вы также должны явно указать applinks:app.domain.com
если вы планируете использовать этот сервер вместе с вашим приложением.
Надеюсь, это поможет.
Кажется, что добавление подстановочного знака в доменной части applinks
был введен только в iOS 9.3 Beta 2
, В 9.3 Beta 2 заметки о выпуске:
Теперь вы можете использовать универсальные ссылки с произвольными поддоменами вместо того, чтобы указывать все поддомены приложения как полностью определенные доменные имена. Записи имеют форму:
: [: номер порта], в котором "webcredentials", "actioncontinuation" или "applinks".
Часть записи теперь может опционально иметь префикс "*." Для обозначения поддомена подстановочного знака. Например:
applinks: * example.com.
Вы говорите, что вы бежите на iOS 9.3.2
, Но это твой deployment target
> = iOS 9.3
? Если нет, попробуйте изменить его. Я думаю, что это решит вашу проблему.
Здесь вы можете найти копию этой заметки о выпуске (извините, у меня нет другого публичного источника)
Редактировать:
Даже если Apple Doc сообщает, что вы можете использовать подстановочные знаки в доменах, у них, похоже, есть проблема по этому поводу:
Чтобы сопоставить все дочерние домены связанного домена, вы можете указать подстановочный знак с помощью префикса . до начала конкретного домена (период обязателен). Соответствие доменов основано на самой длинной подстроке в записях приложения. Например, если вы укажете записи applinks:.mywebsite.com и applinks:*. Users.mywebsite.com, сопоставление для домена emily.users.mywebsite.com будет выполнено для более длинной записи *.users.mywebsite.com. Обратите внимание, что запись для *.mywebsite.com не соответствует mywebsite.com из-за периода после звездочки. Чтобы включить сопоставление для *.mywebsite.com и mywebsite.com, необходимо предоставить отдельную запись для ссылок на приложения для каждого из них.
Я попробовал это в сентябре 2016 года с iOS 9.3.5 и iOS 10 beta. Ситуация остается неизменной: универсальные ссылки по-прежнему не работают, если ссылки на приложения содержат только подстановочные домены, хотя в документации предполагается, что это должно работать.
Я думаю, что это ошибка Apple в документации. Я получил ту же ошибку на 9.3.1. И 9.3.2 работает отлично. Очень интересная ссылка, о проблемах подписания, см. Комментарий Лоуренса Фана
Apple должна сказать, что *.domain.com работает для>= 9.3.2 по этой ссылке Поддержка универсальных ссылок
Apple внесла изменения в файл AASA для поддержки динамической ссылки, пожалуйста, измените и добавьте также в Assciate domain: webcredentials:dev.rlogical.com
{
"applinks": {
"details": [
{
"appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
"components": [
{
"#": "no_universal_links",
"exclude": true,
"comment": "Matches any URL whose fragment equals no_universal_links and instructs the system not to open it as a universal link"
},
{
"/": "/buy/*",
"comment": "Matches any URL whose path starts with /buy/"
},
{
"/": "/help/website/*",
"exclude": true,
"comment": "Matches any URL whose path starts with /help/website/ and instructs the system not to open it as a universal link"
},
{
"/": "/help/*",
"?": { "articleNumber": "????" },
"comment": "Matches any URL whose path starts with /help/ and which has a query item with name 'articleNumber' and a value of exactly 4 characters"
}
]
}
]
},
"webcredentials": {
"apps": [ "ABCDE12345.com.example.app" ]
},
"appclips": {
"apps": ["ABCED12345.com.example.MyApp.Clip"]
}
}