Flutter 应用程序不会验证 Android 上的应用程序链接

问题描述 投票:0回答:1

我试图让我的应用程序使用应用程序链接,但即使我完成了所有步骤并且正在请求我的

assetlinks.json
文件,消歧框仍然显示。我在原生 Android 应用程序中尝试了相同的步骤,并且它在不显示该框的情况下工作。这是我所做的:

1- 创建一个新的 flutter 应用程序。 2-按照 https://flutter.dev/docs/deployment/android 上的说明签署我的应用程序 3- 将以下内容添加到我的活动中

AndroidManifest.xml

<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.come>" />
            </intent-filter>

我将

example.com
替换为我自己的域名,启用了 https,并提供服务
/.well-known/assetlinks.json

以下是

assetlinks.json

的内容
[
    {
        "relation": [
            "delegate_permission/common.handle_all_urls"
        ],
        "target": {
            "namespace": "android_app",
            "package_name": "com.example.app",
            "sha256_cert_fingerprints": [
                "hash_of_app_certificate"
            ]
        }
    }
]

我用我自己的替换了

com.example.app
,并更改了哈希值。我用这个命令来获取哈希值
keytool -list -v -keystore <keystore path> -alias <key alias> -storepass <store password> -keypass <key password>

4-运行

flutter build apk
并在我的设备上安装了该应用程序。我可以看出
assetlinks.json
已从服务器请求,但选择框仍然显示。

我在

https://developers.google.com/digital-asset-links/tools/generator
上测试了我的 assertlinks.json,它说它是成功的,所以任何错误都在应用程序端。

我错过了什么或做错了什么?

这是我的

flutter doctor --verbose

[√] Flutter (Channel stable, 1.22.5, on Microsoft Windows [Version 10.0.19041.746], locale en-US)
    • Flutter version 1.22.5 at C:\flutter
    • Framework revision 7891006299 (7 weeks ago), 2020-12-10 11:54:40 -0800
    • Engine revision ae90085a84
    • Dart version 2.10.4

[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at C:\Users\Moneer\AppData\Local\Android\Sdk
    • Platform android-29, build-tools 29.0.3
    • ANDROID_HOME = C:\Users\Moneer\AppData\Local\Android\Sdk
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[!] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    X Flutter plugin not installed; this adds Flutter specific functionality.
    X Dart plugin not installed; this adds Dart specific functionality.
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] VS Code (version 1.52.1)
    • VS Code at C:\Users\Moneer\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.18.1

[√] Connected device (1 available)
    • sdk gphone x86 64 arm64 (mobile) • emulator-5554 • android-x64 • Android 11 (API 30) (emulator)

! Doctor found issues in 1 category.

flutter deep-linking applinks android-app-links
1个回答
0
投票

如果有人仍在为此苦苦挣扎(3.5 年后,现在 Android 13 已随处可见),以下是我的发现:

如果您在移动设备上按下链接,并且打开的是浏览器而不是应用程序,则问题的根源很可能是 Android 应用程序链接(如果您使用的是 Android,对于 iOS,请参阅通用链接)

要在单击应用程序外部的链接时打开移动应用程序,需要满足两个因素:

1.您已将正确的 assetlinks.json 部署到网络上的正确位置

那就是 https://www.yourdomain.com/.well-known/assetlinks.json

您可以使用 https://developers.google.com/digital-asset-links/tools/generator 或转至 https://play.google.com/console,选择正确的应用程序进行验证然后从左侧菜单转到“增长用户”→“深层链接”

在“域”部分下,如果有任何问题,您可以检查右箭头,如果是 assetlinks.json 的问题,它会建议您需要进行哪些更改

!重要!如果您对域进行部署 - 等待几分钟,让控制台意识到已经发生了。该修复不会立即被识别

2.您拥有正确的 AndroidManifest.xml

您需要以下意图过滤器:

<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:host="www.yourdomain.com"
                    android:scheme="https"/>

您可能还需要

<meta-data android:name="flutter_deeplinking_enabled" android:value="true" />
,但我不确定。

您可能还需要在 firebase.json 中使用以下代码,但我也不确定

"hosting": {
    "public": "flutter/build/web",
    "rewrites": [
      {
        "source": "/auth/**",
        "dynamicLinks": true
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  },
© www.soinside.com 2019 - 2024. All rights reserved.