部署应用程序时,Android App Link 默认为禁用(但否则有效)

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

我正在将 .NET MAUI Android 授权流程从使用现已弃用的自定义 URL 方案处理重定向的流程迁移到使用通过 Firebase 上托管的数字资产链接文件验证的 Android 应用程序链接的流程。 Android 应用程序链接已正确配置,并且在 Android 设备上启用后可以完美运行。

问题在于,当应用程序安装时(无论是通过 Google Play 内部测试轨道还是旁加载),Android 应用程序链接默认处于禁用状态。用户必须手动:

  1. 导航到(电话)设置 > 应用程序 > 设置为默认值 > 支持的网址,
  2. 切换已存在的链接(例如 myfirebasedomain.com)的开关。

manual flow to enable link


我的问题:从 Google Play 安装应用程序时,如何确保默认启用 Android 应用程序链接?是否有配置或已知的解决方法可以避免要求用户手动启用链接?


更新我尝试过的:

我按照评论中引用的链接进行了仔细的梳理。以下是我不仅尝试过的事情,而且还一次又一次地寻找我可能忽略的东西。

但是这里是否有“其他东西”在雷达之下飞行?例如,Google Play 可能会保留验证,直到应用程序经过全面审核,并且处于开发轨道中(请记住,我正在 MRE POC 中对其进行沙箱处理),它肯定尚未提交审核。


  1. 以Release模式编译

    • 发布模式构建 APK,以确保它使用正确的密钥库进行签名并适合域验证。
  2. 已验证的APK签名

    • 使用
      keytool -printcert -jarfile
      命令提取 APK 签名证书的 SHA-256 指纹。
    • 确认提取的 SHA-256 指纹与
      assetlinks.json
      文件中列出的指纹匹配。
  3. 已检查

    assetlinks.json
    辅助功能

    • 已验证
      assetlinks.json
      文件托管在
      https://echoessyncproxy.com/.well-known/assetlinks.json
    • 直接在浏览器中输入 URL 来确认可访问性。
  4. 测试域验证:

    • 运行
      adb shell pm get-app-links com.ivsoftware.echoessyncproxy.maui
      命令检查域验证状态。
    • 观察到域名状态为
      1024
      ,表示验证失败。但为什么?这似乎是“事情”,但其原因是什么?
  5. 验证的应用程序链接行为

    • 使用
      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")}");
        }
    }
}

JSON

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) 表示“未验证”。

android google-oauth maui
1个回答
0
投票

答案:

使用 Google 的 语句列表生成器和测试器 诊断并纠正问题。

据我所知,这从未作为实际的答案发布。


故障分析:

这个问题类似于 Android Deep link-Supported web portsDigital 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"
    ]
  }
}]

我想在这里指出的一点是,如果不是看到第二个问题的评论,我会永远盯着它看!!

@TWL comment


adb 命令(“我尝试过...”)报告验证失败,但没有说明原因。然而,该工具确定了原因并生成了正确的块。这是我第一次尝试这样做,我根本不知道这个工具的存在。

之前

error message verbose

之后

fixed

© www.soinside.com 2019 - 2024. All rights reserved.