Как отключить ссылки на Android-приложения, если пользователь находится на сайте?
Допустим, есть веб-сайт https://www.example.com/ и мы слушаем https://www.example.com/product в Android-приложении со следующим фильтром намерений.
<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:host="www.exmaple.com"
android:pathPrefix="/product"
android:scheme="https" />
</intent-filter>
И файл assetlinks.json также размещен на example.com.
Ссылки на Android-приложения работают нормально, как и ожидалось.
Теперь, если пользователь зашел в браузер и открыл example.com, и пользователь нажал на https://example.com/product который будет открыт в приложении, но мы хотим заблокировать открытие приложения только в том случае, если пользователь находится на нашем веб-сайте.
Любая помощь будет оценена.
0 ответов
После долгих поисков единственным обходным путем, который я смог найти для открытия сети вместо приложения, является перенаправление из Интернета -> приложение (логика перенаправления) -> веб-сайт.
Я заметил важную вещь: приложение никогда не вызывается, если страница разработана в React или Angular и не основана на JSP. В нашем случае мы использовали сервер Tomcat, поэтому всякий раз, когда пользователь переходит на другую страницу, система Android узнает, что в браузере открывается новая страница, что заставляет систему Android открывать приложение Android при прослушивании этого URL-адреса, указанного в намерении. фильтр. Однако этого не происходит, если страница разработана на React и Angular.
Мне действительно сложно это описать, поскольку я не веб-разработчик, и именно это рассказали веб-разработчики, и я испытал на себе как страницы JSP, так и React.
Я думаю, что веб-разработчики могли сказать вам сыр... потому что все дело в URL, а не в содержании. Нажмите и удерживайте в Chrome, а затем "открыть в новой вкладке" работает без прохождения нового URL-адреса через фильтр намерений... и вы не сможете прочитать URL-адрес из Chrome, поэтому вы можете отказаться от этого подхода.
Все, что вы можете сделать, чтобы обойти проблему, которую вы создали, добавив фильтр намерений, - это настроить два поддомена, а затем отфильтровать только один для них, при этом отображая один и тот же контент на обоих из них (требуется канонический метатег в HTML) - тогда вы можете просто использовать страницу как обычно, и ничто не вызовет фильтр намерений.
И для того, чтобы по-прежнему иметь возможность открывать приложение через фильтр намерений... просто добавьте кнопку, которая ссылается на другой поддомен, которому соответствует фильтр намерений. Другие подходы могут быть нелогичными или проблематичными.
Что ж, исходя из официальных документов Android, вам нужно удалить категорию BROWSABLE из фильтра намерений в Manifest.
https://developer.android.com/training/app-links/deep-linking
Из документа для тех, кому сложно открыть URL-адрес и прочитать документ:
Включите категорию ОБЗОР. Это необходимо для того, чтобы фильтр намерений был доступен из веб-браузера. Без этого щелчок по ссылке в браузере не может разрешить ваше приложение.
Это означает, что если вы не хотите, чтобы браузер перенаправлял к вашему приложению, ПРОСТО удалите категорию BROWSABLE. Вот и все.
Итак, ваш Манифест будет выглядеть так:
<intent-filter android:autoVerify="true"
tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data
android:host="www.example.com"
android:pathPrefix="/product"
android:scheme="https" />
</intent-filter>
Вы получите "AppLinkUrlError", чтобы вы могли добавить;
tools:ignore="AppLinkUrlError"
чтобы подавить это.