Я пытаюсь реализовать глубокую ссылку на свое приложение для Android.
Это мой AndroidManifest с фильтрами намерений:
<manifest xmlns:android = "http://schemas.android.com/apk/res/android">
<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.VIBRATE" />
<application android:usesCleartextTraffic = "true" android:name = ".MainApplication"
android:label = "@string/app_name" android:icon = "@mipmap/ic_launcher"
android:roundIcon = "@mipmap/ic_launcher_round" android:allowBackup = "false"
android:theme = "@style/AppTheme" android:screenOrientation = "portrait">
<activity android:name = ".MainActivity" android:label = "@string/app_name"
android:configChanges = "keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
android:launchMode = "singleTask" android:windowSoftInputMode = "adjustResize"
android:exported = "true">
<intent-filter android:autoVerify = "true">
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
<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:scheme = "mygainplan" />
</intent-filter>
<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:scheme = "http" />
<data android:scheme = "https" />
<data android:host = "www.my-gainplan.com" />
<data android:pathPrefix = "/workouts" />
</intent-filter>
</activity>
</application>
</manifest>
Я использую реагирующую навигацию для обработки глубоких ссылок внутри моего приложения с помощью этой конфигурации.
const linking = {
prefixes: [
'https://www.my-gainplan.com',
'mygainplan://',
'https://my-gainplan.com',
],
config: {
screens: {
MyWorkouts: 'workouts',
},
},
};
Чтобы это работало на моем веб-сайте, я добавил на свой веб-сайт следующий файл assetslinks.json.
[
{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.mygainplan",
"sha256_cert_fingerprints": [
"FA:C6:17:45:DC:09:03:78:6F:B9:ED:E6:2A:96:2B:39:9F:73:48:F0:BB:6F:89:9B:83:32:66:75:91:03:3B:9C"
]
}
}
]
sha256 — это тот, который находится в хранилище ключей отладки Android.
Когда я запускаю приложение в режиме отладки, ссылки с префиксом mygainplan:// работают нормально, но ссылки с сайта (https://www.my-gainplan.com/workouts) просто открываю веб-браузер и не приложение. Почему это происходит?
Для этого я использую uri-схему пакета pm. Я использую его через npx (npx uri-scheme open my-gainplan.com/workouts --android), который должен работать нормально.
Он открывает браузер Chrome на моем телефоне, я считаю, что Chrome должен поддерживать эту функцию.
@JaRoMaster, можешь ли ты поделиться своим полным AndroidManifest.xml?
Привет, JaRoMaster! Когда вы создаете глубокую ссылку, у вас есть возможность ее протестировать. этот тест пройден?
Мне пришлось добавить android:autoVerify="true" в фильтр намерений, который также указывает домен. После этого глубокая ссылка работает нормально.
Вы не думаете, что приходите к этому с правильного пути. Приложение связано с идентификатором пакета, таким же, как и глубокая ссылка.
Select Keystore file и добавьте нужное хранилище ключей из дерева приложений.Generate Digital Asset Links fileПри нажатии на Generate Digital Asset Links file вы должны увидеть следующий раздел:
Обратите внимание, что вам придется сохранить файл и загрузить его по ссылке, указанной в разделе ссылка
После добавления загруженного файла по указанной ссылке вы можете нажать Link and Verify.
Когда вы закончите все и пройдете тест, вы сможете запустить приложение, используя глубокую ссылку.
Обратите внимание: важно, чтобы идентификатор пакета был одинаковым на обоих.
Для создания файла assetslinks.json какое-либо программное обеспечение не требуется. Мой файл был правильным, я столкнулся с проблемой из-за ошибки в моем AndroidManifest, как описано выше.
Ну, это Android-студия. не просто программное обеспечение. и я использовал его для создания глубоких ссылок, как я уже говорил
Как вы тестируете? Если вы используете адресную строку браузера, это не сработает. Попробуйте ссылку на веб-странице или аналогичном контенте. Также обратите внимание, что глубокие ссылки по умолчанию поддерживаются не во всех браузерах.