2017-01-02 11 views
3

Я реализовал глубокую привязку к моему приложению, но у меня возникла проблема.Android Глубокая ссылка опускает определенный URL-адрес

<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="*.example.com" 
     android:scheme="https"/> 
</intent-filter> 

Это намерение фильтр обрабатывает все ссылки, но я не хочу, чтобы поймать определенный URL т.е.

https://www.example.com/hello/redirect/ 

То, что я пытался до сих пор:

Я пытался вводить все URL, которые я хочу поймать вручную

<data 
    android:host="*example.com" 
    android:scheme="https" 
    android:pathPrefix="/m/"> 
<data 
    android:host="*example.com" 
    android:scheme="https" 
    android:pathPrefix="/c/"> 
<data 
    android:host="*example.com" 
    android:scheme="https" 
    android:pathPrefix="/p/"> 
... 

Но t купите мою домашнюю страницу URL https://www.example.com не работает.

Если я использую

android:pathPrefix="/" 

тогда это будет начать ловить все URL, снова включая URL я хочу опустить.

Я также пробовал использовать android:pathPattern, но он не может понять сложное регулярное выражение, подобное этому ^((?!redirect).)*$, который отлично работает, когда я пытаюсь использовать его в строках и всех.

Кто-нибудь знает, как я могу опустить определенные URL-адреса?

UPDATE:

Как было предложено @PLNech here, я добавил все URL-адреса, которые мне нужны, чтобы поймать с помощью android:pathPrefix и использовать android:path: "/" поймать URL моей домашней страницы, т.е. https://www.example.com/

<data 
    android:host="*.example.com" 
    android:scheme="https" 
    android:path="/"/> 
<data 
    android:host="*example.com" 
    android:scheme="https" 
    android:pathPrefix="/m/"> 
<data 
    android:host="*example.com" 
    android:scheme="https" 
    android:pathPrefix="/c/"> 
<data 
    android:host="*example.com" 
    android:scheme="https" 
    android:pathPrefix="/p/"> 

ответ

5

Android deep linking mechanism не обеспечивает способ полностью исключить некоторые адреса из Android механизма глубоких связующим: вы можете either включать в явном виде пути с android:path, включаете пути, соответствующие префикс с android:pathPrefix или соответствием уайлдкарда с android:pathPattern, где вы можете использовать * или .*.

В вашем случае, вы должны использовать либо "/" и имеют каждый ссылки на ваш сайт открыт с приложением (включая главную страницу), или каждый DEEP Поделиться ссылкой общего префикс.

Вы также можете посмотреть библиотеку airbnb's DeepLinkDispatch, которая, как представляется, allow excluding specific URLs.

2

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

android:pathPattern не понимает сложный шаблон регулярного выражения, как вы сказали.

Я думаю, что единственный способ решить вашу проблему - изменить URL-адрес, который вы хотите опустить. Измените хост или часть этого URL-адреса или измените имя example.com, скажем, example2.com/hello/redirect/.

+1

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