- Обновление: теперь вы можете обрабатывать домены с подстановочными знаками, используя ссылки на цифровые активы.
аурилио объяснил это в своем новом ответе
Весь процесс задокументирован здесь: https://developer.android.com/training/app-links/verify-site-associations
Подводя итог, можно сказать, что теперь вы можете использовать подстановочный знак в теге host и вы должны загрузить файл json с именем assetlinks. json в папку/маршрут /.well-known в вашем корневом домене.
В качестве альтернативы, если вы объявляете свое имя хоста с помощью подстановочного знака (например, *.example.com), вы должны опубликовать свой файл assetslinks.json в корневом имени хоста (example.com).
Вам также потребуется добавить атрибут android:autoVerify="true" в тег intent-filter.
Вот весь пример на стороне Android:
<application>
<activity android:name=”MainActivity”>
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="*.example.com" />
</intent-filter>
</activity>
</application>
Вот предыдущий ответ от 2016 года: К сожалению, Android не может обрабатывать домены с подстановочными знаками.
Если вы посмотрите руководство по API для тега data (https://developer.android.com/guide/topics/manifest/data-element.html), вы можете видеть, что они упоминают, что подстановочные знаки доступны для pathPattern и mimeType, но не для хоста.
Дело в том, что, как объяснил CommonsWare в другом сообщении на эту тему (https://stackoverflow.com/a/34068591/4160079 а>),
домены проверяются во время установки, и нет возможности добавить новые домены, кроме как путем отправки новой версии приложения с новым манифестом.
Таким образом, вам придется вручную перечислить все доступные субдомены и обновлять приложение всякий раз, когда запускается новый субдомен.
Вот как вы объявляете несколько поддоменов:
<activity android:name="MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:host="subdomain1.example.com" />
<data android:host="subdomain2.example.com" />
<data android:host="subdomain3.example.com" />
</intent-filter>
</activity>
- Да, вы можете обрабатывать только часть путей
Это та же идея, просто перечислите нужные пути, используя атрибут path (опять же, см. руководство по API тега data выше).
Если вы используете строки запроса или параметры пути, предпочтительнее использовать pathPrefix.
При необходимости вы можете использовать здесь подстановочные знаки, выбрав вместо этого pathPattern.
Часть пути URI, которая должна начинаться с /. Атрибут path указывает полный путь, который сопоставляется с полным путем в объекте Intent. Атрибут pathPrefix указывает частичный путь, который сопоставляется только с начальной частью пути в объекте Intent. Атрибут pathPattern указывает полный путь, который сопоставляется с полным путем в объекте Intent, но может содержать следующие подстановочные знаки: Звездочка ('') соответствует последовательности 0 множеству вхождений непосредственно предшествующего символа. Точка, за которой следует звездочка (""."), соответствует любой последовательности от 0 до многих символов.
Вот несколько примеров:
<activity android:name="MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:host="subdomain1.example.com" />
<data android:host="subdomain2.example.com" />
<data android:host="subdomain3.example.com" />
<data android:path="/path1" /> <!-- matches /path1 only -->
<data android:pathPrefix="/path2" /> <!-- matches /path2, /path2/something or also /path2?key=value etc... -->
<data android:pathPattern="/wild.*" /> <!-- matches /wild, /wild3, /wilderness etc... -->
</intent-filter>
</activity>
person
APE
schedule
25.09.2016
android:path
для элемента<data>
. - person CommonsWare   schedule 21.09.2016mWild
и тому подобное вAuthorityEntry
, эта реализацияmatch()
кажется неправильной. Но, помимо этого, наличие рабочих подстановочных знаков в<intent-filter>
/IntentFilter
необходимо, но недостаточно. Возможно, фильтры поддерживают подстановочные знаки, а ссылки на приложения — нет. - person CommonsWare   schedule 26.09.2016