Ссылки на приложения Android проверены. Но по-прежнему появляется диалог разрешения неоднозначности

Когда я нажимаю ссылку: https://example.com/abcd на версии Android 6/7/8, отображается диалоговое окно разрешения неоднозначности. Мы уже проверили домен, разместив json по адресу: https://example.com/.well-known/assetlinks.json. Я сделал все в соответствии с документацией, но ссылка не открывается без неоднозначности. Пожалуйста, помогите мне найти то, что мне не хватает.

Код в манифесте:

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

@MartinZeitler, я не думаю, что это дубликат этого, поскольку ссылки из branch.io отличаются от ссылок приложений тем, кому принадлежит процесс проверки и как они разрешаются.

KingKongCoder 14.05.2019 01:32

@RandomAspirer нет ничего другого, независимо от имени хоста, потому что это происходит на устройстве.

Martin Zeitler 14.05.2019 04:04

вам нужно создать файл json с сертификатом SHA256 для ключа выпуска и загрузить json на свой сайт. Проверить android.jlelse.eu/…

Dan Alboteanu 21.08.2019 15:56

@Tejas B Вы поняли, в чем проблема?

cosic 04.10.2019 18:14
14
5
2 526
6

Ответы 6

Пожалуйста, попробуйте добавить autoVerify = "true":

<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:scheme = "https"
        android:host = "example.com"
        android:pathPattern = "/abcd"
    />

autoVerify = "true" добавлен. но проблема все еще сохраняется.

Tejas B 10.01.2019 12:09

Пожалуйста, проверьте logcat. Должно быть что-то вроде: IntentFilterIntentOp: Проверка [some_number] завершена. Успех: [истина / ложь]

Doni 11.01.2019 13:05

вы можете попробовать это как http, так и https:

<activity
        android:name = ".ui.MainActivity"
        android:launchMode = "singleTask"
        android:screenOrientation = "portrait">
        <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <category android:name = "android.intent.category.BROWSABLE" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data
                android:host = "www.oschina.net"
                android:scheme = "http" />
        </intent-filter>
        <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <category android:name = "android.intent.category.BROWSABLE" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data
                android:host = "www.oschina.net"
                android:scheme = "https" />
        </intent-filter>
        <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <category android:name = "android.intent.category.BROWSABLE" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data
                android:host = "my.oschina.net"
                android:scheme = "http" />
        </intent-filter>
        <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <category android:name = "android.intent.category.BROWSABLE" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data
                android:host = "my.oschina.net"
                android:scheme = "https" />
        </intent-filter>
    </activity>

обновление от 2021 года с Android 12:

Android изменил политику разрешения веб-намерений, которая влияет на обработку ссылок, если вы будете следовать всем новым требованиям, ваше приложение получит шанс, если браузер не справится с ними, подробнее об этом здесь: требования к разрешению веб-намерений

///////////////////// Нижеуказанное поведение все еще может применяться сегодня //////////////////////

Предостережение здесь заключается в том, что если вы устанавливаете приложение через игровой магазин, для "link-handling policy" приложения по умолчанию с зарегистрированными доменами, такими как www.example.com, установлено значение «Обработка в приложении», что откроет приложение, непосредственно подвергающееся проверке фильтра намерений, без каких-либо диалогов для устранения неоднозначности.

Если вы устанавливаете приложение с помощью средств, отличных от playstore, например, через adb, даже если вы подписываете его с помощью хранилища ключей, для link handling policy по умолчанию установлено значение «Всегда спрашивать», в котором будет отображаться диалоговое окно устранения неоднозначности, даже если проверка фильтра намерений проходит для ссылки на ваше приложение.

Есть ли для этого подтверждающая документация?

Tulika 22.05.2019 10:47

нет конкретной документации о том, какой установочный носитель устанавливает какую политику, но есть документация для тестирования «политики обработки ссылок», которую я сделал и пришел к вышеупомянутому выводу, который я упомянул в своем ответе.

KingKongCoder 22.05.2019 17:47

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

creativecreatorormaybenot 15.07.2019 12:02

@creativecreatorormaybenot, это тоже возможно.

KingKongCoder 15.07.2019 22:24

Могу подтвердить, что это именно то, что я испытал. Установил через slack, перешел в "Всегда спрашивать". Установил из магазина, жень на "Обработать в приложении".

Derk-Jan 13.11.2020 07:18

Поздно на вечеринку, но я тоже испытал, что значения неоднозначности постоянно всплывают. Для тех, кому еще не удалось решить эту проблему (или в будущем), перейдите в Logcat и найдите «IntentFilterIntentOp». Вы должны увидеть что-то вроде Verification 8 complete. Success:true. Failed hosts:.. Это может привести к сбою (Verifying IntentFilter. verificationId:8 scheme:"https" hosts:"example.co.za" package:"za.co.example.qa".), если вы загрузили свой файл assetlinks.json в один домен, пока он недоступен на другом или поддоменах, которые вы зарегистрировали в своем фильтре намерений.

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

Получил ту же проблему. Взгляните на свой отпечаток пальца sha256. Если вы тестируете приложения с отладочной версией приложения, вам необходимо разместить отпечаток пальца для отладочной версии. Вы можете сделать это в Android Studio - Инструменты - Помощник по ссылкам на приложения - Связанный веб-сайт.

Когда вы запускаете приложение в Android Studio, на вашем устройстве устанавливается отладочный APK, который может соответствовать живой конфигурации (которая предназначена для выпуска APK или пакета) на панели управления вашего филиала.

Чтобы обработать режим отладки (или тест) в ветке, вот что я сделал

  1. Настройте тестовую конфигурацию на панели управления вашего филиала:

    • Слева вверху на панели инструментов есть переключатель для доступа в тестовый режим, нажмите на него и заполните форму для тестовой конфигурации.
    • Затем создайте ссылку для отладки. Значения поля должны быть такими же, как для ссылки в реальном (выпускном) режиме. единственное отличие: сгенерированная тестовая ссылка содержит префикс yourapp.контрольная работа-app.link/xxxxx
  2. Создайте два файла манифеста Android для каждого типа APK или пакета:

    • app/src/debug/AndroidManifest.xml <- для отладки APK или пакета
    • app/src/main/AndroidManifest.xml <- для выпуска APK или пакета
  3. Выполните настройку Branch SDK для обоих двух файлов манифеста

Теперь вы должны иметь возможность использовать ссылку отладки без отображения запроса разрешения неоднозначности

Другие вопросы по теме