Android Deep links

Deep links是可以让用户直接进入应用的特定部分的URI。

  • 创建,在Manifest中的activity声明中添加intent过滤器
ini 复制代码
<activity
    android:name=".MyMapActivity"
    android:exported="true"
    ...>
    <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="geo" />
    </intent-filter>
</activity>
  • 当存在多个能够处理相同scheme的应用时,app会打开一个对话框选择。

  • 被调用方使用:获取intent.data,拆分解析,组件封装,通过规则+Arouter跳转目标业务。

官方文档:developer.android.com/training/ap...

APP links:scheme为https,并且有签名等机制

  1. 准备域名和资产关联文件

    • 确保你拥有一个 HTTPS 域名,比如 www.example.com

    • 在该域名的服务器根目录下创建一个 .well-known/assetlinks.json 文件,内容类似:

      json 复制代码
      [
        {
          "relation": ["delegate_permission/common.handle_all_urls"],
          "target": {
            "namespace": "android_app",
            "package_name": "com.yourcompany.yourapp",
            "sha256_cert_fingerprints": [
              "AA:BB:CC:...:YY:ZZ"    // 你用来签名 APK 的证书指纹(SHA‑256)
            ]
          }
        }
      ]
    • 部署后,在浏览器访问 https://www.example.com/.well-known/assetlinks.json 能拿到该 JSON。

  2. 在 AndroidManifest.xml 中声明 Intent Filter

    在你希望处理 App Link 的 Activity 节点里添加:

    xml 复制代码
    <activity android:name=".YourDeepLinkActivity">
      <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" />
    
        <!-- 匹配你的 HTTPS 链接 -->
        <data
          android:scheme="https"
          android:host="www.example.com"
          android:pathPrefix="/applink" />
      </intent-filter>
    </activity>
    • android:autoVerify="true":安装时系统自动向服务器验证 assetlinks.json
  3. 签名与构建

    • 用与你在 assetlinks.json 中声明的同一套发布签名(release keystore)对 APK 进行签名。
    • 安装到设备或模拟器上。
  4. 系统验证

    • 安装 APK 后,Android 框架会向 https://www.example.com/.well-known/assetlinks.json 发起请求,检查 package_name 与证书指纹是否匹配。
    • 验证成功后,这个 App 就被注册为该域名的"所有者",当用户点击符合规则的链接时会优先唤起你的 App。
  5. 测试你的 App Link

    • 命令行测试

      sql 复制代码
      adb shell am start \
        -a android.intent.action.VIEW \
        -c android.intent.category.BROWSABLE \
        -d "https://www.example.com/applink/page/123"
    • 检查验证状态

      arduino 复制代码
      adb shell pm get-app-links com.yourcompany.yourapp

      或(Android 11+)

      css 复制代码
      adb shell pm verify-app-links --re-verify com.yourcompany.yourapp

      查看输出中是否有 verified

  6. 在代码中处理跳转

    • YourDeepLinkActivityonCreate()/onNewIntent() 中,用 intent.data 拿到 Uri,再解析出 pathSegmentsqueryParameter

      kotlin 复制代码
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        intent.data?.let { uri ->
          val segments = uri.pathSegments   // e.g. ["applink","page","123"]
          val pageId = segments.getOrNull(2)
          // 根据 pageId 展示对应页面
        }
      }
      override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        setIntent(intent)
        intent.data?.let { handleDeepLink(it) }
      }
  7. 优雅回退

    • 如果 App 未安装,点击 HTTPS 链接会在浏览器打开对应网页。
    • 你也可以在网页中检测 UA 或 JS 判断,提示用户下载或跳转到应用市场。

总结

  1. 服务器端 :部署 assetlinks.json,声明包名+证书指纹。
  2. 客户端 :AndroidManifest 中配置 <intent-filter android:autoVerify="true">;用 release 签名构建并安装。
  3. 验证与测试:系统自动验证并响应点击,或用 ADB 命令手动测试。
  4. 业务处理 :在 Activity 中通过 intent.data 获取并解析 URL 参数。
相关推荐
tager21 分钟前
🔥3行代码搞定全局代理!告别插件依赖的极简方案
前端·fiddler·charles
gnip1 小时前
axios 拦截器实现用户无感刷新 access_token
前端
程序员码歌2 小时前
【零代码AI编程实战】AI灯塔导航-成果展示篇
前端·ai编程·cursor
gnip2 小时前
前端实现即时通讯,常用的技术
前端
烛阴2 小时前
告别 any!用联合类型打造更灵活、更安全的 TS 代码
前端·typescript
excel3 小时前
全面解析 JavaScript 类继承:方式、优缺点与应用场景
前端
用户21411832636023 小时前
dify案例分享-100% 识别率!发票、汇票、信用证全搞定的通用票据识别工作流
前端
拾光拾趣录4 小时前
基础 | HTML语义、CSS3新特性、浏览器存储、this、防抖节流、重绘回流、date排序、calc
前端·面试
小小小小宇5 小时前
前端监测用户卡顿之INP
前端
小小小小宇5 小时前
监测用户在浏览界面过程中的卡顿
前端