402d
@402d
начинал с бейсика на УКНЦ в 1988

Кто уже поправил deep link на чужой host под Android 12?

По 11 работало просто через
<data
                    android:host="lknpd.nalog.ru"
                    android:pathPrefix="/api/v1/receipt"
                    android:scheme="https" />

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

В 12м переделали этот момент
https://developer.android.com/training/app-links/v...

Первая мелочь схема должна быть отдельно
<data android:scheme="https"/>
                <data
                    android:host="lknpd.nalog.ru"
                    android:pathPrefix="/api/v1/receipt" />


верификация по ветке android:autoVerify="true" и https://www.example.com/.well-known/assetlinks.json
как понимаете для альтернативных клиентов не доступна, поэтому Request the user to associate your app with a domain

Так вот сам вопрос кто это уже реально вкрутил ?
Что интересует:
- в onResume рулить видимостью блока что ассации нет
- Запрос на предоставление
- отлов результата

Если делать по примеру с оф документации, то придется разжовывать пользователям шаги с рисунков 1 и 2
типа тапните туда. отчекайте хост

Проще/удобнее можно сделать ?
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 1
402d
@402d Автор вопроса
начинал с бейсика на УКНЦ в 1988
В общем суть - отправляем пользователя к настройкам
по другому не нашел

У себя прикручивал к преференс фрагменту
<SwitchPreferenceCompat
            app:defaultValue="false"
            android:persistent="false"
            app:key="openLink"
            app:title="Ссылки на чек"
            app:summaryOn="обрабатываются этим приложением"
            app:summaryOff="действие по умолчанию в Android">
        </SwitchPreferenceCompat>

        <Preference
            android:key="pref_static_field_key"
            android:selectable="false"
            android:persistent="false"
            android:summary="Чтобы вместо перехода на сайт налоговой, происходила обработка приложением, потребуется подтвердить выбор в системных настройках.\nОткрывать по умолчанию - Добавить ссылку - Поставить галочку"/>

в рут преференс добавил два фиктивных элемента android:persistent="false"

упростил функцию проверки под свои цели
@RequiresApi(api = Build.VERSION_CODES.S)
    private boolean checkLinkAssociation() {

        Context context = requireActivity();
        DomainVerificationManager manager;
        manager = context.getSystemService(DomainVerificationManager.class);
        DomainVerificationUserState userState;
        try {
            userState = manager.getDomainVerificationUserState(context.getPackageName());
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
        Map<String, Integer> hostToStateMap = userState.getHostToStateMap();
        for (String key : hostToStateMap.keySet()) {
            Integer stateValue = hostToStateMap.get(key);
            if (stateValue != null && stateValue != DomainVerificationUserState.DOMAIN_STATE_VERIFIED && stateValue != DomainVerificationUserState.DOMAIN_STATE_SELECTED) {
                return false;
            }
        }

        return true;
    }


в onCreatePreferences запомнил для использования в онресуме и повесил интент
prefOpenLink = findPreference( "openLink");
        if (prefOpenLink != null) {
            final Intent i = new Intent();
            i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
            i.addCategory(Intent.CATEGORY_DEFAULT);
            i.setData(Uri.parse("package:" + requireActivity().getPackageName()));
            prefOpenLink.setIntent(i);
        }


ну и статус свитча ставлю текущий
@Override
    public void onResume() {
        super.onResume();
        if (prefOpenLink != null) {
            boolean status = true;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                status = checkLinkAssociation();
            }
            prefOpenLink.setChecked(status);
        }
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы