Android App Intent Filter иногда не работает - PullRequest
4 голосов
/ 05 марта 2019

Для проекта я столкнулся с очень странной проблемой:

Глубокие ссылки работали очень хорошо в течение последнего года, но в последнее время (с начала января-2019) мы получали жалобы от наших пользователей.что глубокие ссылки перестали работать (некоторые говорят, 9 из 10 раз).

Мы не изменили ни один из этого кода и испытываем большие трудности при воспроизведении этой проблемы.

Даже странно, что в то редкое время, когда мы сами сталкиваемся с проблемой, ОС Android даже не показывает наше приложение в качестве опции через диалог «открыть с».Это говорит нам о том, что ОС иногда забывает, что в манифесте приложения зарегистрированы фильтры намерений.

Перезапуск приложения, кажется, исправляет это, и глубокие ссылки снова начинают работать.Приложение также работает каждый раз, когда мы делаем новую сборку из Android Studio, что делает его очень трудным для воспроизведения.

В нашем манифесте есть специальное действие, которое обрабатывает глубокие ссылки:

<activity
    android:name="com.company.DeepLinkActivity"
    android:noHistory="true"
    android:launchMode="singleTask">
    <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="ideal-payment"
            android:scheme="com.company.ideal" />
        <data
            android:host="ideal-payment"
            android:scheme="com-company-ideal" />

    </intent-filter>

    <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="${appLinkIdealHost}"
            android:pathPrefix="/ideal-betaling/landingpage"
            android:scheme="https" />
    </intent-filter>

    <intent-filter android:autoVerify="true">
        ...
    </intent-filter>

    <intent-filter android:autoVerify="true">
        ...
    </intent-filter>
</activity>

Мы подумали, что это может быть связано с тем, что autoVerify недоступна, но тогда ОС должна показать диалоговое окно «открыть с», которое не происходит, когда возникает проблема.

Есть ли кто-то, с кем столкнулсяпохожая проблема?Любая помощь или предложения будут с благодарностью.

Ответы [ 4 ]

0 голосов
/ 27 марта 2019

Отличная новость, мы смогли найти решение.Проблема возникла из более старой версии браузера Chrome.https://bugs.chromium.org/p/chromium/issues/detail?id=935864

После выхода версии 73.0.3683.90 несколько дней назад проблема исчезла.Спасибо Google: D

0 голосов
/ 17 марта 2019

Когда приложение останавливается, например, с исключением, или когда пользователь принудительно остановил его из настроек, или на некоторых устройствах, когда пользователь удаляет приложение из истории (или из задач), приложение будет принудительно остановлено автоматически (что нехороший выбор от производителя) , когда приложение находится в остановленном состоянии, его манифест intentFilter не будет использоваться (когда приложение впервые установлено и никогда не открывается, также оно находится в этой фазе)

В остановленном состоянии приложение не будет работать по любой причине, за исключением ручного запуска действия или явного намерения, касающегося действия, услуги или широковещания.

https://riptutorial.com/android/example/30592/android-stopped-state


Большинство версий Android, которые вы упомянули, были 8 или более, поэтому ниже цитата также может быть полезна, но это для служб и приемников вещания.

Всякий раз, когда приложениеработает в фоновом режиме, он потребляет некоторые из ограниченных ресурсов устройства, таких как оперативная память.Это может привести к ухудшению взаимодействия с пользователем, особенно если пользователь использует ресурсоемкое приложение, такое как игра или просмотр видео. Для улучшения взаимодействия с пользователем Android 8.0 (уровень API 26) накладывает ограничения на возможности приложений в фоновом режиме.

https://developer.android.com/about/versions/oreo/background

0 голосов
/ 18 марта 2019

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

<data android:host="ideal-payment" android:scheme="com.company.ideal" />
<data android:host="ideal-payment" android:scheme="com-company-ideal" />

это далеко не идеально, потому что эти хосты и схемы недопустимы, см. data-element .

Я бы предположил, основываясь на всем коде, который явно был удержан ... что другие intent-filter могут также содержать дубликаты data элементов, которые должны бытьперемещены в отдельный intent-filter, из которых элемент activity допускает несколько.установите android:autoVerify="true" на все эти intent-filter, а затем внимательно просмотрите logcat после установки пакета.

0 голосов
/ 13 марта 2019

Можете ли вы указать версию ОС Android?потому что android: autoVerify = "true" работает только на Android 6.0 и выше, чтобы система пыталась проверить все хосты, связанные с URL-адресами, в любом из фильтров намерений вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...