我试图让我的应用程序使用应用程序链接,但即使我完成了所有步骤并且正在请求我的
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.
如果有人仍在为此苦苦挣扎(3.5 年后,现在 Android 13 已随处可见),以下是我的发现:
如果您在移动设备上按下链接,并且打开的是浏览器而不是应用程序,则问题的根源很可能是 Android 应用程序链接(如果您使用的是 Android,对于 iOS,请参阅通用链接)
要在单击应用程序外部的链接时打开移动应用程序,需要满足两个因素:
那就是 https://www.yourdomain.com/.well-known/assetlinks.json
您可以使用 https://developers.google.com/digital-asset-links/tools/generator 或转至 https://play.google.com/console,选择正确的应用程序进行验证然后从左侧菜单转到“增长用户”→“深层链接”
在“域”部分下,如果有任何问题,您可以检查右箭头,如果是 assetlinks.json 的问题,它会建议您需要进行哪些更改
!重要!如果您对域进行部署 - 等待几分钟,让控制台意识到已经发生了。该修复不会立即被识别
您需要以下意图过滤器:
<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"
}
]
},