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¶m2=87294">Click</a>
</BODY>
</HTML>
На некоторых устройствах (например, Nexus 5 под управлением Android 5.1) щелчок по ссылке открывает мое приложение, как ожидалось, на других устройствах (например, Nexus 6 также работает 5.1) вместо моего приложения открывается PlayStore (страница моего приложения).
Есть идеи, что может быть проблемой?
EDIT: Как ни странно, эта "ошибка" исчезает, когда упрощается URL-адрес:
http://m.mycompany.de/list?param1=178¶m2=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 для оригинального сообщения.