Был ли опыт работы с сертификатами для подтверждения URL
Что проверяют
Под «подтверждением URL» в Android обычно имеют в виду App Links: проверку, что сайт разрешает приложению открывать свои ссылки. Реже речь о привязке TLS-сертификата сервера. Уточните, о чём вопрос, и покажите, что знаете обе темы. Следом спрашивают, почему ссылки открываются в браузере, хотя всё настроено.
Как отвечать
App Links: у intent-filter в манифесте ставят android:autoVerify="true", схему https и хост. На сайте по адресу /.well-known/assetlinks.json лежит файл Digital Asset Links с именем пакета и SHA-256 отпечатком сертификата подписи приложения. Система скачивает его и сверяет отпечаток. С Android 12 неподтверждённая ссылка открывается в браузере, а не в диалоге выбора.
- отпечаток: из
./gradlew signingReportилиkeytool. При Play App Signing нужен отпечаток ключа подписи Google Play из раздела App integrity, а не ключа загрузки; - файл: только HTTPS, без редиректов,
Content-Type: application/json, на каждом хосте изintent-filter; - отладка:
adb shell pm get-app-links <package>показывает статус,pm verify-app-links --re-verifyзапускает проверку заново.
Привязку сертификата сервера (pinning) задают в network_security_config.xml через <pin-set> или в коде через CertificatePinner из OkHttp. Держат запасной пин и срок действия, иначе плановая смена сертификата на бэкенде сломает приложение у всех.
Если с этим не работали, скажите прямо и расскажите механику: это честнее выдуманного проекта.
Где спотыкаются
Кладут в assetlinks.json только отпечаток debug-ключа или ключа загрузки, и после публикации в Play проверка молча не проходит.
Для самоподписанного сертификата пишут TrustManager, который принимает всё. Это отключает проверку TLS целиком, Google Play предупреждает о такой небезопасной реализации. Правильно добавить свой CA в Network Security Config.
Пинят конечный сертификат без запасного пина и узнают об этом в день перевыпуска.