Android Глубокая ссылка на PlayStore вместо моего приложения на некоторых устройствах

Я зарегистрировал следующий фильтр намерений в своем манифесте приложения:

    <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:host="m.mycompany.de"
            android:pathPattern="/app/list"
            android:scheme="http" />
    </intent-filter>

И создал простую страницу html, чтобы проверить, открывается ли приложение правильно:

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML>
   <HEAD>
      <TITLE>
         A Small Hello 
      </TITLE>
   </HEAD>
<BODY>
   <a href = "http://m.mycompany.de/app/list?param1=178&param2=87294">Click</a>

</BODY>
</HTML>

На некоторых устройствах (например, Nexus 5 под управлением Android 5.1) щелчок по ссылке открывает мое приложение, как ожидалось, на других устройствах (например, Nexus 6 также работает 5.1) вместо моего приложения открывается PlayStore (страница моего приложения).

Есть идеи, что может быть проблемой?

EDIT: Как ни странно, эта "ошибка" исчезает, когда упрощается URL-адрес:

http://m.mycompany.de/list?param1=178&param2=87294

и мой фильтр намерений

   <data
        android:host="m.mycompany.de"
        android:pathPattern="/app"
        android:scheme="http" />

но это не вариант, потому что у меня нет контроля над URL-адресами для моего живого приложения.

Ответы

Ответ 1

Вы можете использовать pathprefix вместо android: pathPattern

<data 
      android:host="m.mycompany.de"
      android:pathPrefix="/app/list"
      android:scheme="http" />

и во втором случае, когда вы используете ниже URL,

http://m.mycompany.de/list?param1=178¶m2=87294

тег данных должен быть

<data 
      android:host="m.mycompany.de"
      android:pathPrefix="/list"
      android:scheme="http" />

Ответ 2

Как я вижу, вы используете параметр pathPattern раздела данных в неправильном направлении.

Согласно документам Google:

Атрибут pathPattern указывает полный путь, который сопоставляется с полным путем в объекте Intent.

Поэтому вам нужно использовать pathPrefix вместо pathPattern:

Атрибут pathPrefix указывает частичный путь, который сопоставляется только с начальной частью пути в объекте Intent.

Или просто отбросьте путь и используйте только хост и схему:

<data
    android:host="m.mycompany.de"
    android:scheme="http" />

PS Дополнительно обратите внимание на комментарий Mimmo Grottoli для оригинального сообщения.