我正在将 .NET MAUI Android 授权流程从使用现已弃用的自定义 URL 方案处理重定向的流程迁移到使用通过 Firebase 上托管的数字资产链接文件验证的 Android 应用程序链接的流程。 Android 应用程序链接已正确配置,并且在 Android 设备上启用后可以完美运行。
问题在于,当应用程序安装时(无论是通过 Google Play 内部测试轨道还是旁加载),Android 应用程序链接默认处于禁用状态。用户必须手动:
我的问题:从 Google Play 安装应用程序时,如何确保默认启用 Android 应用程序链接?是否有配置或已知的解决方法可以避免要求用户手动启用链接?
我按照评论中引用的链接进行了仔细的梳理。以下是我不仅尝试过的事情,而且还一次又一次地寻找我可能忽略的东西。
但是这里是否有“其他东西”在雷达之下飞行?例如,Google Play 可能会保留验证,直到应用程序经过全面审核,并且处于开发轨道中(请记住,我正在 MRE POC 中对其进行沙箱处理),它肯定尚未提交审核。
以Release模式编译:
已验证的APK签名:
keytool -printcert -jarfile
命令提取 APK 签名证书的 SHA-256 指纹。assetlinks.json
文件中列出的指纹匹配。已检查
assetlinks.json
辅助功能:
assetlinks.json
文件托管在 https://echoessyncproxy.com/.well-known/assetlinks.json
。测试域验证:
adb shell pm get-app-links com.ivsoftware.echoessyncproxy.maui
命令检查域验证状态。1024
,表示验证失败。但为什么?这似乎是“事情”,但其原因是什么?验证的应用程序链接行为:
adb shell am start -a android.intent.action.VIEW -d "https://echoessyncproxy.com/auth"
测试了应用程序链接。WebAuthenticatorCallbackActivity
被调用,表明IntentFilter
正在按预期工作。这是 Web 身份验证器回调活动(再次,它确实有效!),其中显示了 AutoVerify=True。
using Android.App;
using Android.Content;
using Android.OS;
namespace GoogleDriveLocalSyncProxy.Maui.TestProject.Platforms.Android
{
[Activity(Label = "FirebaseCallback", Exported = true)]
[IntentFilter(new[] { Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "https",
DataHost = "echoessyncproxy.com",
DataPath ="/auth",
DataPathPrefix = "/auth",
AutoVerify = true)]
public class FirebaseCallback : WebAuthenticatorCallbackActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
System.Diagnostics.Debug.WriteLine($"{nameof(WebAuthenticatorCallbackActivity)}: code = {Intent?.Data?.GetQueryParameter("code")}");
}
}
}
https://echoessyncproxy.com/.well-known/assetlinks.json
{
"relation": [ "delegate_permission/common.handle_all_urls" ],
"target": {
"namespace": "android_app",
"package_name": "com.ivsoftware.echoessyncproxy.maui",
"sha256_cert_fingerprints": [
"A8:F5:14:1E:38:A7:1E:83:56:DC:63:9B:94:DF:06:B5:A1:54:06:BB:45:E7:02:E8:F0:2A:61:CC:55:58:C5:CA",
"BB:D1:A0:90:5E:E9:F6:71:23:CB:99:A6:84:18:7A:E2:CD:BF:4B:AE:F8:C0:C6:46:6E:65:5C:8B:A8:3D:2C:34"
]
}
}
>keytool -printcert -jarfile ...
Signer #1:
Certificate #1:
Owner: CN={my name}, OU={my org unit}, O={my company}, L={my city}, ST={my state}, C={my country}
Issuer: CN={my name}, OU={my org unit}, O={my company}, L={my city}, ST={my state}, C={my country}
Serial number: 1047269e
Valid from: Tue Dec 03 14:31:15 MST 2024 until: Sat Apr 20 15:31:15 MDT 2052
Certificate fingerprints:
SHA1: A6:4F:C9:B3:A5:55:27:87:C5:DF:6F:2A:3B:BA:16:5A:4E:C0:7E:90
SHA256: BB:D1:A0:90:5E:E9:F6:71:23:CB:99:A6:84:18:7A:E2:CD:BF:4B:AE:F8:C0:C6:46:6E:65:5C:8B:A8:3D:2C:34
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
>adb shell pm get-app-links com.ivsoftware.echoessyncproxy.maui
com.ivsoftware.echoessyncproxy.maui:
ID: 926983c3-9969-42f4-9e39-e408c79dcc14
Signatures: [BB:D1:A0:90:5E:E9:F6:71:23:CB:99:A6:84:18:7A:E2:CD:BF:4B:AE:F8:C0:C6:46:6E:65:5C:8B:A8:3D:2C:34]
Domain verification state:
echoessyncproxy.com: 1024
代码 0x0400 (1024) 表示“未验证”。
答案:
使用 Google 的 语句列表生成器和测试器 诊断并纠正问题。
据我所知,这从未作为实际的答案发布。
故障分析:
这个问题类似于 Android Deep link-Supported web ports 和 Digital Asset Link verifyed by Android Studio,但没有在 Google Play Console 中通过,公平地说,这个问题应该关闭,因为它是 由于打字错误造成的,因为最终错误的是我的
assetlinks.json
文件是这样的:
{
"relation": [ "delegate_permission/common.handle_all_urls" ],
"target": {
"namespace": "android_app",
"package_name": "com.ivsoftware.echoessyncproxy.maui",
"sha256_cert_fingerprints": [
"A8:F5:14:1E:38:A7:1E:83:56:DC:63:9B:94:DF:06:B5:A1:54:06:BB:45:E7:02:E8:F0:2A:61:CC:55:58:C5:CA",
"BB:D1:A0:90:5E:E9:F6:71:23:CB:99:A6:84:18:7A:E2:CD:BF:4B:AE:F8:C0:C6:46:6E:65:5C:8B:A8:3D:2C:34"
]
}
}
...本来应该是这样的:
[{
"relation": [ "delegate_permission/common.handle_all_urls" ],
"target": {
"namespace": "android_app",
"package_name": "com.ivsoftware.echoessyncproxy.maui",
"sha256_cert_fingerprints": [
"A8:F5:14:1E:38:A7:1E:83:56:DC:63:9B:94:DF:06:B5:A1:54:06:BB:45:E7:02:E8:F0:2A:61:CC:55:58:C5:CA",
"BB:D1:A0:90:5E:E9:F6:71:23:CB:99:A6:84:18:7A:E2:CD:BF:4B:AE:F8:C0:C6:46:6E:65:5C:8B:A8:3D:2C:34"
]
}
}]
我想在这里指出的一点是,如果不是看到第二个问题的评论,我会永远盯着它看!!。
adb 命令(“我尝试过...”)报告验证失败,但没有说明原因。然而,该工具确定了原因并生成了正确的块。这是我第一次尝试这样做,我根本不知道这个工具的存在。