Глубокие ссылки Android не работают с assetslinks.json

Я пытаюсь реализовать глубокую ссылку на свое приложение для 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) просто открываю веб-браузер и не приложение. Почему это происходит?

Как вы тестируете? Если вы используете адресную строку браузера, это не сработает. Попробуйте ссылку на веб-странице или аналогичном контенте. Также обратите внимание, что глубокие ссылки по умолчанию поддерживаются не во всех браузерах.

CommonsWare 19.03.2024 21:37

Для этого я использую uri-схему пакета pm. Я использую его через npx (npx uri-scheme open my-gainplan.com/workouts --android), который должен работать нормально.

JaRoMaster 19.03.2024 21:48

Он открывает браузер Chrome на моем телефоне, я считаю, что Chrome должен поддерживать эту функцию.

JaRoMaster 19.03.2024 21:48

@JaRoMaster, можешь ли ты поделиться своим полным AndroidManifest.xml?

Maveňツ 20.03.2024 11:34

Привет, JaRoMaster! Когда вы создаете глубокую ссылку, у вас есть возможность ее протестировать. этот тест пройден?

Sally Azulay 28.03.2024 08:52
1
5
375
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Мне пришлось добавить android:autoVerify="true" в фильтр намерений, который также указывает домен. После этого глубокая ссылка работает нормально.

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

  1. Домен, который вы хотите добавить?
  2. Идентификатор пакета, связанный с вашим приложением.
  3. Select Keystore file и добавьте нужное хранилище ключей из дерева приложений.
  4. Нажмите на Generate Digital Asset Links file

При нажатии на Generate Digital Asset Links file вы должны увидеть следующий раздел:

Обратите внимание, что вам придется сохранить файл и загрузить его по ссылке, указанной в разделе ссылка

После добавления загруженного файла по указанной ссылке вы можете нажать Link and Verify.

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

Обратите внимание: важно, чтобы идентификатор пакета был одинаковым на обоих.

Для создания файла assetslinks.json какое-либо программное обеспечение не требуется. Мой файл был правильным, я столкнулся с проблемой из-за ошибки в моем AndroidManifest, как описано выше.

JaRoMaster 28.03.2024 16:46

Ну, это Android-студия. не просто программное обеспечение. и я использовал его для создания глубоких ссылок, как я уже говорил

Sally Azulay 29.03.2024 13:14

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